【问题标题】:JWT authentication in vertx throwing unauthorizedvertx 中的 JWT 身份验证引发未经授权的行为
【发布时间】:2021-07-23 14:07:34
【问题描述】:

在我的应用程序中,我正在使用带有 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 代码。

【问题讨论】:

  • 你必须 end() 处理程序中某处的 RequestContext。否则不会被退回
  • @injecteer,它没有进入“/api/getAuthentication”处理程序。我已经尝试过 end(),还是一样,这就是为什么我看不到任何日志

标签: java reactjs jwt keycloak vert.x


【解决方案1】:

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

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

【讨论】:

  • ,非常感谢。我尝试了第一个选项,它按预期工作
猜你喜欢
  • 2021-07-17
  • 2021-02-16
  • 2018-06-13
  • 1970-01-01
  • 2018-01-23
  • 2016-08-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多