我一直在尝试解决这个问题一段时间,我正在为 Outlook 开发 Office-js 插件,并试图通过我的插件访问 Microsoft Graph 数据。
但我无法验证从 getAccessTokenAsync 收到的令牌。如果我尝试使用 Office-JS-Helpers 的身份验证器,我可以获得访问权限,但我更愿意使用插件的内置功能。
我试图使用的代码是这样的:
Office.initialize = () => {
var options = { forceAddAccount: true, forceConsent: true } as Office.AuthOptions;
Office.context.auth.getAccessTokenAsync(options, getAccessTokenAsyncCallback);
}
function getAccessTokenAsyncCallback(accessTokenResponse) {
console.log(accessTokenResponse.value)
client = MicrosoftGraph.Client.init({
authProvider: (done) => {
done(null, accessTokenResponse.value);
},
debugLogging: false
})
client.api("/me")
.get((err, res, rawResponse) => {
console.log(err)
console.log("rawResponse")
console.log(rawResponse)
})
}
我的清单中的 WebApplicationInfo 是:
<WebApplicationInfo>
<Id>{AppUID}</Id>
<Resource>api://localhost:3000/{AppUID}</Resource>
<Scopes>
<Scope>profile</Scope>
<Scope>user.read</Scope>
</Scopes>
</WebApplicationInfo>
</VersionOverrides>
并且权限已在我的应用程序注册门户上的应用程序中设置。
据我所见,在验证/解码我从 getAccessTokenAsync 收到的 JSON Web 令牌时,它应该是有效的。
但是每当我尝试使用此令牌进行连接时,我都会收到以下响应:
{
"statusCode": 401,
"code": "InvalidAuthenticationToken",
"message": "Access token validation failure.",
"requestId": "4a0ce952-0e90-XXXXXXXXX-db20c6cca94e",
"date": "2018-08-30T05:37:43.000Z",
"body": {
"code": "InvalidAuthenticationToken",
"message": "Access token validation failure.",
"innerError": {
"request-id": "4a0ce952-0e90-XXXXXXXXX-db20c6cca94e",
"date": "2018-08-30T07:37:43"
}
}
}
我根本无法弄清楚这里的问题是什么,我错了,因为从 getAccessTokenAsync 返回的令牌是我需要的令牌吗?
哦,是的,我正在使用 Outlook 2016 版本 1807 build 10325.20118 运行 Office365 环境单击运行