Springboot 集成keycloak admin-cli api

Springboot 集成keycloak admin-cli api

  • 前言
  • keycloak配置
    • 安装keycloak
    • 创建realm
    • 创建client
    • 配置角色
  • Springboot 项目中的配置:
    • spring-boot 配置文件
    • 配置文件映射类
    • keycloak客户端配置类

)

前言

本文适合有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

成功运行之后页面是下图这样的,接下来就是配置工作了。使用命令中用到的用户名和密码即可
Springboot 集成keycloak admin-cli api_第1张图片

Keycloak默认会提供一个master realm, 可以理解为超级管理员。建议大家在开发过程中不要将master写到配置文件中去,很不安全,可以创建自己的realm。下文介绍如何在代码中避免使用master。

创建realm

左上角,Master->Add realm
Springboot 集成keycloak admin-cli api_第2张图片
Springboot 集成keycloak admin-cli api_第3张图片

创建client

在刚创建的realm下创建client,主要的配置都是在client下进行
Springboot 集成keycloak admin-cli api_第4张图片
Springboot 集成keycloak admin-cli api_第5张图片
client创建好后,会进入settings 标签页,在此标签页,将Access Type设为 confidential 以及将Services Accounts Enabled设为On。
Springboot 集成keycloak admin-cli api_第6张图片
做好以上两步点击保存,会生成新的标签页“Credentials” 和“Services Accounts Roles”。Crendntial标签页中的secret需要写入到配置文件中。
Springboot 集成keycloak admin-cli api_第7张图片

配置角色

在刚新生成的Services Accounts Roles标签页中配置角色
Springboot 集成keycloak admin-cli api_第8张图片
到这,页面上的操作也就结束了。

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秒解!

你可能感兴趣的:(java,java,spring,boot,keycloak)