我正在尝试验证我的服务器端代码正在接收的oAuth令牌。
服务器端代码正在使用Exchange托管API,并且我的加载项使用Outlook API中的Office.context.mailbox.getUserIdentityTokenAsync(callback)
方法从Exchange检索正在发送的令牌。
当我调用token.Validate(uri)
方法时,我遇到了一个问题:
var token = (AppIdentityToken)AuthToken.Parse(rawToken);
token.Validate(new Uri(hostUri));
hostUri :Outlook加载项中名为 getUserIdentityTokenAsync 的页面的完全限定URI。
要从加载项的页面中获取hostUri,我使用:
var hostUri = location.href.split('?')[0];
但是,使用提供的URI会在尝试验证令牌时导致错误:
我很困惑为什么它会使用加载项所在位置的URI而不是使用发出令牌的身份提供者的公钥(即Exchange)。
答案 0 :(得分:1)
EWS令牌验证库会通过公钥验证令牌的签名。
主机Uri用于验证id_token中的 aud 声明,以验证此令牌是否从您的应用程序而不是其他应用程序传递。
请确保 Uri 与主页相匹配,您可以通过jwt.io解析id_token以查看真实的 Uri (aud)令牌。