Office API getAccessTokenAsync 结果产生来自 Graph 的 InvalidAuthenticationToken 响应
Office API getAccessTokenAsync result yields InvalidAuthenticationToken response from Graph
我已经尝试解决这个问题一段时间了,我正在为 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>
并且已经在应用程序注册门户上的我的应用程序中设置了权限。
据我所知,validating/decoding 我从 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 环境点击 运行
getAccessTokenAsync
返回的令牌,称为 bootstrap 令牌,不 使您的加载项直接访问 MS Graph。相反,它允许 Office 主机应用程序(在本例中为 Outlook)访问 加载项的 Web 应用程序。然后,加载项的 Web 应用程序使用该令牌获取 Microsoft Graph 的访问令牌。它通过使用 "on behalf of" OAuth 流程来做到这一点。请参阅此节点的详尽文档:SSO in Office Add-ins and, for Outlook-specific guidance, also see Authenicate a user in an Outlook Add-in with an SSO token.
我已经尝试解决这个问题一段时间了,我正在为 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>
并且已经在应用程序注册门户上的我的应用程序中设置了权限。
据我所知,validating/decoding 我从 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 环境点击 运行
getAccessTokenAsync
返回的令牌,称为 bootstrap 令牌,不 使您的加载项直接访问 MS Graph。相反,它允许 Office 主机应用程序(在本例中为 Outlook)访问 加载项的 Web 应用程序。然后,加载项的 Web 应用程序使用该令牌获取 Microsoft Graph 的访问令牌。它通过使用 "on behalf of" OAuth 流程来做到这一点。请参阅此节点的详尽文档:SSO in Office Add-ins and, for Outlook-specific guidance, also see Authenicate a user in an Outlook Add-in with an SSO token.