我有一个带有vert.x(4.4.2)后端的Web应用程序,我的目标是使用Azure AD对我的用户进行身份验证,并获得JWT令牌以从应用程序调用Microsft Graph API。
今天,我以这种方式使用oAuth2 CODE流(vert.x OAuth2客户端):
1.应用程序通过调用后端的HTTTP authenticate端点来启动身份验证
1.后端将用户重定向到SSO
- SSO将代码发布到后端
1.后端调用SSO的HTTP端点以获取令牌
1.后端验证令牌(!!!)
1.后端重定向到具有令牌的应用程序
当我们使用默认作用域(clientId/.default)时,这是完美的工作,但如果我们改变作用域,例如。Team.ReadBasic.All Chat.ReadWrite ChatMessage.Read后端验证令牌失败,签名错误
11:38:26.199 [vert.x-eventloop-thread-15] ERROR io.vertx.ext.web.RoutingContext - Unhandled exception in router
java.lang.RuntimeException: Signature verification failed
at io.vertx.ext.auth.impl.jose.JWT.decode(JWT.java:312)
at io.vertx.ext.auth.impl.jose.JWT.decode(JWT.java:177)
从其他帖子中,我了解到,如果JWT令牌是为了访问Graph API而生成的,那么我们永远不应该验证它。所以我的问题如下:
->是否可以在vert.x端禁用令牌验证,以便我们可以有不同的作用域
“如果没有,最好的做法是什么?”只使用一个具有默认范围的令牌来访问我们的应用程序,并且访问Graph API,应用程序本身将请求另一个令牌???
多谢帮忙
1条答案
按热度按时间3lxsmp7m1#
Microsoft Graph API正在为JWT验证(散列随机数)添加扩展。
为了让它工作,我们需要设置:
这将确保随机数被散列值替换并正确验证。