如何在 Spring Boot 微服务架构中使用 Keycloak 实现 JWT?
Posted
技术标签:
【中文标题】如何在 Spring Boot 微服务架构中使用 Keycloak 实现 JWT?【英文标题】:How to implement JWT with Keycloak in Spring boot microservice acrhitecture? 【发布时间】:2019-07-15 04:16:36 【问题描述】:我已经阅读了一些关于 Keycloak spring 实现的文章(例如:easily-secure-your-spring-boot-applications-with-keycloak),但没有人提到如何与 JWT 一起使用。
我已经创建了 zuul api 网关并添加了 Keycloak 适配器,如之前链接的文章中所述。没关系,但我想将 JWT 与 keycloak 一起使用。
在别处提到将客户端访问类型设置为仅承载,将会话策略设置为 NullAuthenticatedSessionStrategy。这已经足够了还是需要 JWT 的其他东西?
所以我的问题:
如何在 Keycloak 管理员上为 JWT 配置客户端? 如何在 JWT 的后端配置文件中配置 Keycloak? 如何为 JWT 配置 Keycloak 适配器? 如何将用户信息传递给微服务?在网关中创建过滤器?但是我如何从请求中获取用户信息?【问题讨论】:
【参考方案1】:Keycloak 访问令牌是JWT
。它是JSON
,JSON
中的每个字段都称为claim
。默认情况下,登录的username
在access token
中名为“preferred_username”
的claim
中返回。 Spring Security OAuth2 资源服务器期望用户名在名为 “user_name”
的 claim
中。因此,您需要创建映射器以将登录的 username
映射到名为 user_name
的新 claim
。
为了提供对客户端(微服务)的访问,需要将各自的role
分配/映射到user
。
在你的spring boot应用程序中,你需要配置与keycloak服务器的连接,提供auth
url、token
url、scope
、grant-type
、client-id
和client-secret
。
之后,您的应用能够解析 JWT 令牌,您需要创建一些 JwtAccessTokenCustomizer
。这个类应该扩展DefaultAccessTokenConverter
并实现JwtAccessTokenConverterConfigurer
类。主要逻辑在于public OAuth2Authentication extractAuthentication(Map<String, ?> tokenMap)
方法。
然后需要配置OAuth2 Resource Server
,为其他微服务提供访问权限。为此,您在此处定义 - Oauth2RestTemplate
Bean。
最后,通过标准配置 Component
保护您的 REST API。
所以,你可以看到,这是一个很大的工作,不能用代码来描述,展示你的一些工作,把它分成块,然后问你有趣的问题。
【讨论】:
以上是关于如何在 Spring Boot 微服务架构中使用 Keycloak 实现 JWT?的主要内容,如果未能解决你的问题,请参考以下文章
Spring-Boot:Spring Cloud构建微服务架构