0

我正在尝试使用 JWT 身份验证在 thorntail 中设置 JAX-RS 服务。一切正常(我可以注入Principal并且用户设置正确),除了在身份验证失败的情况下,仍然在没有任何 401-HTTP-Header 的情况下发送答案。我所做的是:

  • 添加@LoginConfig(authMethod = "MP-JWT", realmName = "my-domain")到我的Application-Class
  • 配置安全域

    security:
      security-domains:
        my-domain:
          jaspi-authentication:
            login-module-stacks:
              roles-token-stack:
                login-modules:
                  jwt-jaspi-login-module:
                  code: org.wildfly.swarm.microprofile.jwtauth.deployment.auth.jaas.JWTLoginModule
                  flag: required
          auth-modules:
            http:
              code: org.wildfly.extension.undertow.security.jaspi.modules.HTTPSchemeServerAuthModule
              module: org.wildfly.extension.undertow
              flag: required
              login-module-stack-ref: roles-token-stack
    
  • 配置 JWT 特定的东西(似乎工作,所以我在这里跳过)

我还需要做什么才能使其正常工作?我需要向我的端点添加任何注释吗?正如我所说,我想在身份验证失败的情况下返回 401。

到目前为止我发现的是:JASPICAuthenticationMechanism.isMandatory需要返回 true 才能使其正常工作。如果是这种情况JWTAuthMechanism.sendChallenge,则在失败后触发JWTAuthMechanism.authenticate,因此向客户端发送 401。但我不知道,在哪种情况下isMandatory返回 true。

感谢您在这种情况下的任何帮助!

4

2 回答 2

1

一、安全域的配置不是100%正确的。这是对 YAML 一部分的修复:

      roles-token-stack:
        login-modules:
        - login-module: jwt-jaspi-login-module
          code: org.wildfly.swarm.microprofile.jwtauth.deployment.auth.jaas.JWTLoginModule
          flag: required

第二,确实需要在 JAX-RS 资源上使用常见的 Java EE 注释( @RolesAllowed、、、@DenyAll) 。@PermitAll

于 2019-02-20T10:47:33.823 回答
0

解决方案(感谢 Ladicek,请参阅下面的评论):

如果要使用 MP JWT,请不要以 .开头,如果以. 开头Swarm,请不要忘记设置标志。useUberJarthorntail:run

于 2019-02-25T07:02:41.140 回答