如何在 Spring 启动微服务架构中使用 Keycloak 实现 JWT?
How to implement JWT with Keycloak in Spring boot microservice acrhitecture?
我已经阅读了一些有关 Keycloak spring 实现的文章(例如:easily-secure-your-spring-boot-applications-with-keycloak),但没有人提到如何与 JWT 一起使用。
我已经创建了 zuul api 网关并添加了 Keycloak 适配器,如之前链接的文章中所述。没关系,但我想将 JWT 与 keycloak 一起使用。
在别处提到将客户端访问类型设置为 bearer-only,并将会话策略设置为 NullAuthenticatedSessionStrategy。够了还是需要 JWT 的其他东西?
所以我的问题:
- 如何在 Keycloak admin 上为 JWT 配置客户端?
- 如何在 JWT 的后端配置文件中配置 Keycloak?
- 如何为 JWT 配置 Keycloak 适配器?
- 如何将用户信息传递给微服务?在网关中创建过滤器?但是我如何从请求中获取用户信息?
Keycloak 访问令牌是 JWT
。它是一个 JSON
,JSON
中的每个字段称为 claim
。默认情况下,登录 username
在 access token
中名为 “preferred_username”
的 claim
中返回。 Spring 安全 OAuth2 资源服务器需要 claim
中名为 “user_name”
的用户名。因此,您需要创建映射器以将登录 username
映射到名为 user_name
.
的新 claim
为了提供对客户端(微服务)的访问,相应的role
需要是assigned/mapped到user
。
在您的 spring 启动应用程序中,您需要配置与 keycloak 服务器的连接,提供 auth
url、token
url、scope
、grant-type
、client-id
和 client-secret
.
之后,您的应用能够解析 JWT 令牌,您需要创建一些 JwtAccessTokenCustomizer
。 class 应该扩展 DefaultAccessTokenConverter
并实现 JwtAccessTokenConverterConfigurer
classes。主要逻辑在于public OAuth2Authentication extractAuthentication(Map<String, ?> tokenMap)
方法。
然后需要配置OAuth2 Resource Server
为其他微服务提供访问权限。为此,您在此处定义 - Oauth2RestTemplate
Bean.
最后,通过标准配置 Component
.
保护您的 REST API
所以,你看,这是一个庞大的工作,无法用代码描述,展示你的一些工作,把它分成块,提出有趣的问题。
我已经阅读了一些有关 Keycloak spring 实现的文章(例如:easily-secure-your-spring-boot-applications-with-keycloak),但没有人提到如何与 JWT 一起使用。
我已经创建了 zuul api 网关并添加了 Keycloak 适配器,如之前链接的文章中所述。没关系,但我想将 JWT 与 keycloak 一起使用。
在别处提到将客户端访问类型设置为 bearer-only,并将会话策略设置为 NullAuthenticatedSessionStrategy。够了还是需要 JWT 的其他东西?
所以我的问题:
- 如何在 Keycloak admin 上为 JWT 配置客户端?
- 如何在 JWT 的后端配置文件中配置 Keycloak?
- 如何为 JWT 配置 Keycloak 适配器?
- 如何将用户信息传递给微服务?在网关中创建过滤器?但是我如何从请求中获取用户信息?
Keycloak 访问令牌是 JWT
。它是一个 JSON
,JSON
中的每个字段称为 claim
。默认情况下,登录 username
在 access token
中名为 “preferred_username”
的 claim
中返回。 Spring 安全 OAuth2 资源服务器需要 claim
中名为 “user_name”
的用户名。因此,您需要创建映射器以将登录 username
映射到名为 user_name
.
claim
为了提供对客户端(微服务)的访问,相应的role
需要是assigned/mapped到user
。
在您的 spring 启动应用程序中,您需要配置与 keycloak 服务器的连接,提供 auth
url、token
url、scope
、grant-type
、client-id
和 client-secret
.
之后,您的应用能够解析 JWT 令牌,您需要创建一些 JwtAccessTokenCustomizer
。 class 应该扩展 DefaultAccessTokenConverter
并实现 JwtAccessTokenConverterConfigurer
classes。主要逻辑在于public OAuth2Authentication extractAuthentication(Map<String, ?> tokenMap)
方法。
然后需要配置OAuth2 Resource Server
为其他微服务提供访问权限。为此,您在此处定义 - Oauth2RestTemplate
Bean.
最后,通过标准配置 Component
.
所以,你看,这是一个庞大的工作,无法用代码描述,展示你的一些工作,把它分成块,提出有趣的问题。