验证 Exchange oAuth 令牌

Validate Exchange oAuth token

我正在尝试验证我的服务器端代码正在接收的 oAuth 令牌。

服务器端代码正在使用 Exchange Managed API,正在发送的令牌是由我的加载项使用 Outlook Office.context.mailbox.getUserIdentityTokenAsync(callback) 方法从 Exchange 中检索的 API.

我在调用 token.Validate(uri) 方法时 运行 遇到了问题:

var token = (AppIdentityToken)AuthToken.Parse(rawToken);
token.Validate(new Uri(hostUri));

根据 documentation:

hostUri: The fully qualified URI to the page in your Outlook add-in that called getUserIdentityTokenAsync.

要从加载项的页面中获取 hostUri,我使用:

var hostUri = location.href.split('?')[0];

但是,使用提供的 URI 会在尝试验证令牌时导致错误:

我很困惑为什么它会使用加载项所在位置的 URI,而不是使用颁发令牌(即 Exchange)的身份提供者的 public 密钥。

EWS 令牌验证库将通过 public 密钥验证令牌的签名。

主机 Uri 用于验证 id_token 中的 aud 声明,以验证此令牌是从您的应用程序而不是其他应用程序传递的。

请确保 Uri 与主机页面匹配,您可以通过 jwt.io 解析 id_token 以查看真实的 Uri(aud) 在令牌中。