如何在 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 访问令牌是 JWT。它是一个 JSONJSON 中的每个字段称为 claim。默认情况下,登录 usernameaccess token 中名为 “preferred_username”claim 中返回。 Spring 安全 OAuth2 资源服务器需要 claim 中名为 “user_name” 的用户名。因此,您需要创建映射器以将登录 username 映射到名为 user_name.

的新 claim

为了提供对客户端(微服务)的访问,相应的role需要是assigned/mapped到user

在您的 spring 启动应用程序中,您需要配置与 keycloak 服务器的连接,提供 auth url、token url、scopegrant-typeclient-idclient-secret.

之后,您的应用能够解析 JWT 令牌,您需要创建一些 JwtAccessTokenCustomizer。 class 应该扩展 DefaultAccessTokenConverter 并实现 JwtAccessTokenConverterConfigurer classes。主要逻辑在于public OAuth2Authentication extractAuthentication(Map<String, ?> tokenMap)方法。

然后需要配置OAuth2 Resource Server为其他微服务提供访问权限。为此,您在此处定义 - Oauth2RestTemplate Bean.

最后,通过标准配置 Component.

保护您的 REST API

所以,你看,这是一个庞大的工作,无法用代码描述,展示你的一些工作,把它分成块,提出有趣的问题。