如何配置 Thorntail 2.5.0.Final 以使用来自 Keycloak 的 JWT 令牌授权用户?

Posted

技术标签:

【中文标题】如何配置 Thorntail 2.5.0.Final 以使用来自 Keycloak 的 JWT 令牌授权用户?【英文标题】:How to configure Thorntail 2.5.0.Final to authorize users with JWT token from Keycloak? 【发布时间】:2019-12-02 14:49:17 【问题描述】:

我在通过从 Keycloak 收到的 Bearer TOKEN 授权用户时遇到问题。

任务是授权来自 Angular 应用程序的用户请求到我的后端 Thorntail 2.5.0.Final 微服务。我已经覆盖了前端部分,并且应用程序将 Authorization: Bearer TOKEN 附加到我的服务的每个请求中。

我已尝试遵循以下 2 个指南: https://rieckpil.de/howto-microprofile-jwt-authentication-with-keycloak-and-react/ https://kodnito.com/posts/microprofile-jwt-with-keycloak/

使用 thorntail microprofile 和 keycloak-micropfofile-jwt-fractions,但它们似乎都不起作用。

    @Inject
    @ConfigProperty(name = "message")
    private String message;
    @Inject
    private JsonWebToken callerPrincipal;


    @GET
    @RolesAllowed("testrole")
    @ApiOperation(value = "Pridobi uporabnike", notes = "Pridobi vse uporabnike iz baze.", response = Uporabnik.class)
    public Response getUsers() 
        return Response.ok(callerPrincipal.getRawToken() + " is allowed to read message: " + message).build();
    

得到以下回复

null is allowed to read message: Very Secure 42!

我尝试的第二件事是添加 keycloak 分数并按照此示例https://github.com/thorntail/thorntail-examples/tree/master/security/keycloak通过标头发送令牌

我添加了资源/keycloak.json


  "realm": "Intra",
  "auth-server-url": "https://idm.ra.net/auth",
  "ssl-required": "external",
  "resource": "prenosOSBE",
  "verify-token-audience": true,
  "credentials": 
    "secret": "e9709793-9333-40a7-bb95-2026ad98b568"
  ,
  "use-resource-role-mappings": true,
  "confidential-port": 0

和示例中的 KeycloakSecurityContextFilter.java。 如果我尝试调用我的端点,我会得到 401 Unauthorized 或 403 Forbidden 如果我没有随请求发送令牌。

所以我想知道的是,如果我的任务是通过我的 Thorntail 微服务上的 Bearer 令牌授权用户,那么应该使用哪个分数?

microprofile-jwt、keycloak-microprofile-jwt 或 keycloak 以及它工作所需的最低配置是什么?

【问题讨论】:

【参考方案1】:

keycloak 部分是根据https://www.keycloak.org/docs/4.8/securing_apps/index.html#jboss-eap-wildfly-adapter 用于 WildFly 的 Keycloak 适配器,它允许您使用 Java EE 中的常见安全机制(web.xml 等中的<security-constraint>s)您可以在此处查看示例:@987654322 @

microprofile-jwt 允许您使用裸 MicroProfile JWT(即,@RolesAllowed 在 JAX-RS 资源等上)。您必须配置预期的颁发者、其公钥等,如 MP JWT 文档中所述。你可以在这里看到一个例子:https://github.com/rhoar-qe/thorntail-test-suite/tree/master/microprofile/microprofile-jwt-1.0

keycloak-microprofile-jwt 有点混合。它不公开 Keycloak 适配器,而是在内部使用它来验证 Keycloak 发出的令牌,并通过 MicroProfile JWT 公开令牌。你可以在这里看到一个例子:https://github.com/thorntail/thorntail/tree/master/testsuite/testsuite-keycloak-mpjwt

【讨论】:

以上是关于如何配置 Thorntail 2.5.0.Final 以使用来自 Keycloak 的 JWT 令牌授权用户?的主要内容,如果未能解决你的问题,请参考以下文章

Thorntail 没有优雅地退出

Thorntail project-defaults.yml的技术参数

使用 KEYCLOAK 确保 thorntail 服务

Docker(Spring Boot 或 Thorntail)和 Keycloak

在 Thorntail WildFly 服务器中添加应用程序用户的最简单方法是啥?

Quarkus如何在application.properties中设置环境变量