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

How to configure Thorntail 2.5.0.Final to authorize users with JWT token from Keycloak?

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

任务是授权来自 Angular 应用程序的用户请求到我的 back-end Thorntail 2.5.0.Final micro-service。我涵盖了 front-end 部分,应用程序将 Authorization: Bearer {TOKEN} 附加到对我的服务的每个请求。

我尝试遵循这两个指南: 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,但其中 none 似乎有效。

    @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 读取消息:非常安全 42!

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

我添加了resources/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 以及它工作所需的最低配置是什么?

keycloak 部分是根据 https://www.keycloak.org/docs/4.8/securing_apps/index.html#jboss-eap-wildfly-adapter It lets you use the common security mechanisms from Java EE (<security-constraint>s in web.xml etc.) You can see an example here: https://github.com/rhoar-qe/thorntail-test-suite/tree/master/wildfly/keycloak

用于 WildFly 的 Keycloak 适配器

microprofile-jwt 允许您使用裸 MicroProfile JWT(即,@RolesAllowed JAX-RS 资源等)。您必须配置预期的颁发者、其 public 密钥等,如 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