Quarkus中JWT角色验证失效,@RolesAllowed拦截所有请求如何解决?
问题解决步骤
1. 确认依赖配置
先确保项目中已添加Quarkus JWT扩展依赖:
<!-- Maven 配置 --> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-smallrye-jwt</artifactId> </dependency>
// Gradle 配置 implementation 'io.quarkus:quarkus-smallrye-jwt'
2. 映射角色声明字段
Quarkus默认不会自动识别你JWT里使用的微软标准角色声明URI,需要在application.properties中手动指定角色对应的Claim键:
# 指定从JWT的该URI字段读取角色信息 smallrye.jwt.roles-claim=http://schemas.microsoft.com/ws/2008/06/identity/claims/role
3. 配置签名验证参数
你的JWT采用HMAC-SHA256算法签名,需在配置文件中添加验证密钥:
# 替换为你的实际HMAC密钥 smallrye.jwt.verify.key-value=your-real-hmac-secret
如果密钥存储在文件中,可改用:
smallrye.jwt.verify.key.location=path/to/your/secret.key
4. 匹配发行方信息
配置JWT中的iss字段校验,确保与令牌一致:
smallrye.jwt.issuer=IMS.company.com
5. 检查JWT有效期
你的JWT过期时间戳为1677257784(对应2023年2月24日),确认当前时间未超出该范围,否则令牌会被判定失效。
6. 规范请求携带方式
请求时必须在请求头中正确携带JWT:
Authorization: Bearer <你的完整JWT字符串>
完成以上配置后,Quarkus就能正确识别JWT中的角色权限,@RolesAllowed({"Admin"})只会拦截无Admin角色的请求。
内容的提问来源于stack exchange,提问作者Section
相关产品推荐
相关产品推荐

