Springboot 集成keycloak admin-cli api

Posted 浦江之猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Springboot 集成keycloak admin-cli api相关的知识,希望对你有一定的参考价值。

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

以上是关于Springboot 集成keycloak admin-cli api的主要内容,如果未能解决你的问题,请参考以下文章

Keycloak - spring boot - 外部登录网页

如何在没有登录页面的情况下将 Keycloak 与 Spring Boot(API) 集成

Spring-boot 和 Keycloak 集成

Spring Boot - KeyCloak 指向 403 禁止

Keycloak 与 Spring boot 集成,使用自定义登录页面(在没有 keycloak 的默认登录页面的情况下登录)

如何从 KeyCloak 获取用户组并用 Java 打印它们