一段时间以来,我一直在尝试解决此问题,我正在研究Outlook的Office-js插件,并试图通过我的插件访问Microsoft Graph数据。
但是我无法验证我从getAccessTokenAsync收到的令牌。 如果我尝试使用Office-JS-Helpers中的身份验证器,则可以访问,但是我更喜欢使用插件的内置功能。</ p>
我要使用的代码是这样:
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返回的令牌吗?
哦,是的,我正在Office 2016环境下运行,其Outlook 2016版本1807内部版本10325.20118单击运行
答案 0 :(得分:3)
由Beds
返回的令牌称为引导令牌,否确实使您的加载项可以直接访问MS Graph。而是给Office宿主应用程序(在这种情况下为Outlook)访问到外接程序的Web应用程序。外接程序的Web应用程序然后使用该令牌来获取对Microsoft Graph的访问令牌。它通过使用“代表” OAuth流来实现。请参阅此节点上的详细文档:SSO in Office Add-ins,有关Outlook的特定指导,请参见Authenicate a user in an Outlook Add-in with an SSO token。