vertx 中的 JWT 身份验证抛出未经授权

时间:2021-04-30 08:06:36

标签: java reactjs jwt keycloak vert.x

在我的应用程序中,我使用的是带有 keycloak 身份验证的响应。我正在尝试使用从 keycloak 接收到的令牌来保护我的后端 vertx API。 我关注了这个博客 http://paulbakker.io/java/jwt-keycloak-angular2/

我是这样从 react 调用的

    return await fetch('/api/getAuthentication',{
        method: 'GET',
        headers: {"Authorization" : `Bearer ${token}`}
        })
}

在我的顶点侧

JsonObject authConfig = new JsonObject()
                    .put("public-key", "MyPublicKeyFromKeycloak")
                    .put("permissionsClaimKey", "realm_access/roles");        
            JWTAuth authProvider = JWTAuth.create(vertx, new JWTAuthOptions(authConfig));
            router.route("/api/*").handler(JWTAuthHandler.create(authProvider));

我尝试使用以下代码进行测试,

router.route("/api/getAuthentication").handler(ctx -> {
                logger.info("Headers: {}", ctx.request().headers().get("Authorization"));
                logger.info(ctx.user().principal().encodePrettily());
            });

我看不到任何日志,在我的浏览器中,响应为“未经授权”,带有 401 代码。

1 个答案:

答案 0 :(得分:0)

首先,JWTAuthOptions 不会对您在键 "public-key" 下设置的内容做任何事情,因为它没有任何映射到它的属性(即使在 Java 中可以有一个 { {1}} 在属性名称中)。因此,要么直接使用 setter 在 - 上设置值,要么咨询 documentation 以获得正确的键。

第二,如果您的 Keycloak 是使用 OIDC 设置的,那么您可以简单地使用 JWTAuthOptions 类自动从 Keycloak 中发现必要的参数。哪个更容易。