Thorntail MP JWT / Undertow:需要身份验证
Thorntail MP JWT / Undertow: required authentication
我正在尝试使用 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 的东西(似乎有效,所以我在这里跳过)
我还需要做什么才能使其正常工作?我是否需要向端点添加任何注释?正如我所说,我想 return 一个 401 以防身份验证失败。
到目前为止我发现:JASPICAuthenticationMechanism.isMandatory
需要 return true 才能正常工作。如果是这种情况,JWTAuthMechanism.sendChallenge
会在 JWTAuthMechanism.authenticate
失败后触发,因此会向客户端发送 401。但我不知道,在哪种情况下 isMandatory
return 是正确的。
感谢您在此案例中提供的任何帮助!
一,安全域的配置不是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
。
我正在尝试使用 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 的东西(似乎有效,所以我在这里跳过)
我还需要做什么才能使其正常工作?我是否需要向端点添加任何注释?正如我所说,我想 return 一个 401 以防身份验证失败。
到目前为止我发现:JASPICAuthenticationMechanism.isMandatory
需要 return true 才能正常工作。如果是这种情况,JWTAuthMechanism.sendChallenge
会在 JWTAuthMechanism.authenticate
失败后触发,因此会向客户端发送 401。但我不知道,在哪种情况下 isMandatory
return 是正确的。
感谢您在此案例中提供的任何帮助!
一,安全域的配置不是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
。