1

我在通过从 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/

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

我尝试的 2. 事情是添加 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,它工作所需的最低配置是什么?

4

1 回答 1

0

这部分是根据https://www.keycloak.org/docs/4.8/securing_apps/index.html#jboss-eap-wildfly-adapterkeycloak的 WildFly 的 Keycloak 适配器它允许您使用 Java EE 中的常见安全机制(s in等)你可以在这里看到一个例子:https ://github.com/rhoar-qe/thorntail-test-suite/tree/master/wildfly/keycloak<security-constraint>web.xml

允许您使用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

于 2019-08-01T06:49:51.877 回答