Springboot 集成keycloak admin-cli api
)
前言
本文适合有keycloak的基础的同学参考。
语言: java
框架: spring-boot
运行环境: docker
最近在做一个项目,使用keycloak作为鉴权服务,公司的安全策略要求keycloak本身提供的master realm不能出现在配置文件,因此花了些功夫研究了一番,主要的工作都在于配置。
keycloak配置
安装keycloak
通过docker在本地将keycloak跑起来,参考此博文:Keycloak - Getting started - Docker ,主要是运行命令:
docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:17.0.0 start-dev
成功运行之后页面是下图这样的,接下来就是配置工作了。使用命令中用到的用户名和密码即可
Keycloak默认会提供一个master realm, 可以理解为超级管理员。建议大家在开发过程中不要将master写到配置文件中去,很不安全,可以创建自己的realm。下文介绍如何在代码中避免使用master。
创建realm
左上角,Master->Add realm
创建client
在刚创建的realm下创建client,主要的配置都是在client下进行
client创建好后,会进入settings 标签页,在此标签页,将Access Type设为 confidential 以及将Services Accounts Enabled设为On。
做好以上两步点击保存,会生成新的标签页“Credentials” 和“Services Accounts Roles”。Crendntial标签页中的secret需要写入到配置文件中。
配置角色
在刚新生成的Services Accounts Roles标签页中配置角色
到这,页面上的操作也就结束了。
Springboot 项目中的配置:
spring-boot 配置文件
keycloak:
protocol: http
host: 127.0.0.1:8080
admin-client-id: poc-cli
realm: poc-realm
client-secret: ***来自keycloak页面***
配置文件映射类
@ConfigurationProperties(prefix = "keycloak")
@ConstructorBinding
@RequiredArgsConstructor
@Getter//这里使用了lombok,所以代码中没有get方法
@ToString
public class KeycloakConfig {
/**
* Indicate the protocol of auth url of keycloak
*/
private final String protocol;
/**
* Indicate the host of keycloak auth url
*/
private final String host;
/**
* Indicate the id of configured admin client in keycloak
*/
private final String adminClientId;
/**
* Indicate the configured realm in keycloak
*/
private final String realm;
/**
* Indicate the client secret in keycloak
*/
private final String clientSecret;
}
keycloak客户端配置类
@Bean
public Keycloak client() {
String serverUrl = keycloakConfig.getProtocol() + "://" + keycloakConfig.getHost();
return KeycloakBuilder.builder()
.grantType("client_credentials")
.serverUrl(serverUrl)
.realm(keycloakConfig.getRealm())
.clientId(keycloakConfig.getAdminClientId())
.clientSecret(keycloakConfig.getClientSecret())
.build();
}
至此,所有的配置结束,祝大家在IT之路上少走弯路,一路绿灯不堵车,测试一性通过,bug秒解!