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

JWT authentication in vertx throwing unauthorized

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

我在 React 中这样调用

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

在我的vertx端

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 代码。

首先,JWTAuthOptions 不会对您在键 "public-key" 下设置的内容执行任何操作,因为它没有映射到它的任何 属性(即使有可能在 Java 中有一个 - 在 属性 名称中)。因此,要么直接使用设置器在 JWTAuthOptions 上设置您的值,要么咨询 documentation 以获取正确的键。

其次,如果您的 Keycloak 设置了 OIDC,那么您可以简单地使用 OpenIDConnectAuth class 自动从 Keycloak 中发现必要的参数。哪个更简单。