我已经阅读了一些有关Keycloak spring实现的文章(例如:easily-secure-your-spring-boot-applications-with-keycloak),但是没有人提到如何与JWT一起使用。
我已经创建了zuul api网关并添加Keycloak适配器,如先前链接的文章中所述。可以,但是我想将JWT与keycloak一起使用。
在其他地方提到的将客户端访问类型设置为仅承载,并将会话策略设置为NullAuthenticatedSessionStrategy。足够了,还是需要JWT的其他东西?
所以我的问题:
答案 0 :(得分:0)
Keycloak访问令牌是JWT
。它是一个JSON
,该JSON
中的每个字段都称为claim
。默认情况下,登录username
在claim
中名为“preferred_username”
的{{1}}中返回。 Spring Security OAuth2资源服务器期望在名为access token
的{{1}}中使用用户名。因此,您需要创建映射器以将登录claim
映射到名为“user_name”
的新username
。
为了提供对客户端(微服务)的访问,需要将各个claim
分配/映射到user_name
。
然后在您的Spring Boot应用程序中,需要配置与keycloak服务器的连接,提供role
,user
,auth
,token
,{{1 }}和scope
。
之后,您的应用程序能够解析JWT令牌,您需要创建一些grant-type
。此类应扩展client-id
并实现client-secret
类。主要逻辑在于JwtAccessTokenCustomizer
方法。
然后,您需要配置DefaultAccessTokenConverter
以提供对其他微服务的访问。为此,您在此处定义-JwtAccessTokenConverterConfigurer
Bean。
最后,通过标准配置public OAuth2Authentication extractAuthentication(Map<String, ?> tokenMap)
保护REST API。
因此,您可以看到,这是一项很大的工作,无法用代码进行描述,无法展示您的一些工作,将其划分为大块,并提出有趣的问题。