jwt - Quarkus MicroProfile JWT 通过 JWKS 进行身份验证
问题描述
我正在尝试使用 JWKS 端点来提供用于验证 JWT 签名的公钥。在我的application.properties
中,我设置了以下内容:
mp.jwt.verify.publickey.location = http://localhost:1080/jwks
看来这确实被使用了:
2019-08-17 18:02:28,593 DEBUG [io.sma.jwt.con.JWTAuthContextInfoProvider] (executor-thread-1) init, mpJwtPublicKey=NONE, mpJwtIssuer=NONE, mpJwtLocation=http://localhost:1080/jwks
2019-08-17 18:02:28,599 DEBUG [io.sma.jwt.aut.AbstractBearerTokenExtractor] (executor-thread-1) tokenHeaderName = Authorization
2019-08-17 18:02:28,643 DEBUG [io.qua.sma.jwt.run.aut.JwtIdentityManager] (executor-thread-1) verify, id=null, credential=io.quarkus.smallrye.jwt.runtime.auth.JWTCredential@780ca7ed
2019-08-17 18:02:28,719 DEBUG [io.sma.jwt.aut.pri.KeyLocationResolver] (executor-thread-1) Trying location as JWK(S)...
当尝试向此应用程序中的端点发出请求时,它会崩溃:
2019-08-17 18:02:29,048 WARN [io.sma.jwt.aut.pri.DefaultJWTTokenParser] (executor-thread-1) Token is invalid: JWT (claims->{"identityType":"user","authorities":[],"accountId":"0812081208","userId":"ybx8912jq59","iat":1566086374,"exp":1566089974}) rejected due to invalid claims. Additional details: [[17] Unexpected exception thrown from validator org.jose4j.jwt.consumer.IssValidator: java.lang.NullPointerException at org.jose4j.jwt.consumer.IssValidator.expectedValue(IssValidator.java:72); org.jose4j.jwt.consumer.IssValidator.validate(IssValidator.java:59); ...omitted...]
2019-08-17 18:02:29,050 DEBUG [io.qua.sma.jwt.run.aut.JwtIdentityManager] (executor-thread-1) failed, id=null, credential=io.quarkus.smallrye.jwt.runtime.auth.JWTCredential@780ca7ed: org.wildfly.security.auth.server.RealmUnavailableException: Failed to verify token
at io.quarkus.smallrye.jwt.runtime.auth.MpJwtValidator.validateClaimsSet(MpJwtValidator.java:44)
从这个堆栈跟踪中我能理解的最好的,id=null
可能是一个问题?我在这里没有其他事情要做,因为我可以确认这个 JWT 是有效的,因为我是生成它的人,并且可以通过其他应用程序对其进行验证。
我无权向此 JWT 添加其他字段/值,因为我不拥有身份验证系统。有什么办法可以解决这个问题吗?
解决方案
来自的 NPEIssValidator
建议您可能遇到此https://bitbucket.org/b_c/jose4j/issues/135/issvalidator-throws-nullpointerexception,这意味着您的令牌需要颁发iss
者声明或 JWT 消费者不需要设置为要求通过不使用构建器上的任何方法进行索赔iss
。setExpectedIssuer[s]
推荐阅读
- apache-spark - 如何从 Spark 访问 Hive?
- ios - 在 wkwebview 中更新 Youtube 播放器后显示空白白屏
- c# - 使用 axios react 和 .net core 上传大文件
- python - 仅使用 selenium 抓取文本
- indexing - 如何在训练/测试拆分后使用交叉验证验证
- mysql - laravel 的 join() 后面实际使用的是哪个 join?
- android - 流式传输视频至 16 次
- python - 在列表中搜索所有类型的项目
- flutter - 如何让资产图像颤动?
- typescript - 是否可以根据另一种记录类型定义具有键和值的记录,但增加键名?