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

时间:2019-07-24 12:35:07

标签: java jwt keycloak thorntail microprofile

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

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

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

具有刺尾形轮廓和钥匙斗篷-micropfofile-jwt-馏分,但它们似乎都不起作用。

    @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();
    }

并得到以下答复

允许空值读取消息:“非常安全42”!

我尝试过的2.事情是添加密钥斗篷分数,并按照此示例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未经授权或403禁止访问。

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

microprofile-jwt,keycloak-microprofile-jwt或keycloak,工作所需的最低配置是什么?

1 个答案:

答案 0 :(得分:0)

keycloak部分是https://www.keycloak.org/docs/4.8/securing_apps/index.html#jboss-eap-wildfly-adapter中用于WildFly的Keycloak适配器,它使您可以使用Java EE(<security-constraint>中的web.xml s等)的通用安全机制。可以在此处查看示例:https://github.com/rhoar-qe/thorntail-test-suite/tree/master/wildfly/keycloak

microprofile-jwt使您可以使用裸MicroProfile JWT(即,JAX-RS资源上的@RolesAllowed等)。您必须按照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