Thorntail MP JWT / Untertow:所需的身份验证



我正在尝试在thorntail中设置JAX-RS服务,并使用JWT身份验证。一切正常(我可以注入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.authenticate失败后触发JWTAuthMechanism.sendChallenge,因此将401发送给客户端。但是我不知道,在哪种情况下isMandatory返回true。

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

一个,安全域的配置不是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)。

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

如果要使用MP JWT,请不要以Swarm启动它,并且如果使用thorntail:run启动,请不要忘记设置标志useUberJar

相关内容

  • 没有找到相关文章

最新更新