如何在Spring Boot微服务架构中使用Keycloak实现JWT?

时间:2019-02-21 09:42:58

标签: spring-boot jwt microservices keycloak api-gateway

我已经阅读了一些有关Keycloak spring实现的文章(例如:easily-secure-your-spring-boot-applications-with-keycloak),但是没有人提到如何与JWT一起使用。

我已经创建了zuul api网关并添加Keycloak适配器,如先前链接的文章中所述。可以,但是我想将JWT与keycloak一起使用。

在其他地方提到的将客户端访问类型设置为仅承载,并将会话策略设置为NullAuthenticatedSessionStrategy。足够了,还是需要JWT的其他东西?

所以我的问题:

  • 如何在Keycloak admin上为JWT配置客户端?
  • 如何在JWT的后端配置文件中配置Keycloak?
  • 如何为JWT配置Keycloak适配器?
  • 如何将用户信息传递给微服务?在网关中创建过滤器?但是我如何从请求中获取用户信息?

1 个答案:

答案 0 :(得分:0)

Keycloak访问令牌是JWT。它是一个JSON,该JSON中的每个字段都称为claim。默认情况下,登录usernameclaim中名为“preferred_username”的{​​{1}}中返回。 Spring Security OAuth2资源服务器期望在名为access token的{​​{1}}中使用用户名。因此,您需要创建映射器以将登录claim映射到名为“user_name”的新username

为了提供对客户端(微服务)的访问,需要将各个claim分配/映射到user_name

然后在您的Spring Boot应用程序中,需要配置与keycloak服务器的连接,提供roleuserauthtoken,{{1 }}和scope

之后,您的应用程序能够解析JWT令牌,您需要创建一些grant-type。此类应扩展client-id并实现client-secret类。主要逻辑在于JwtAccessTokenCustomizer方法。

然后,您需要配置DefaultAccessTokenConverter以提供对其他微服务的访问。为此,您在此处定义-JwtAccessTokenConverterConfigurer Bean。

最后,通过标准配置public OAuth2Authentication extractAuthentication(Map<String, ?> tokenMap)保护REST API。

因此,您可以看到,这是一项很大的工作,无法用代码进行描述,无法展示您的一些工作,将其划分为大块,并提出有趣的问题。