我已在https://apps.dev.microsoft.com注册了多租户应用,因为Azure AD应用中未提供“管理员同意”提示。我们的应用需要管理员同意才能检索有关用户及其日历的信息。
我可以提供与此应用程序注册时完全不同的租户的管理员同意,并使用提供的访问令牌来检索所有必要的信息,但这显然会在一小时后到期,我们需要离线访问。
我尝试在https://login.windows.net/common/oauth2/token
端点使用tenantId而不是'common',但是会收到与以下相同的消息。
以下是以json格式提交给令牌端点的数据(在提交之前在节点内转换为格式编码格式):
{
grant_type: 'refresh_token',
client_id: 'e5c0d59d-b2c8-4916-99ac-3c06d942b3e3',
client_secret: '(redacted)',
refresh_token: '(redacted)',
scope: 'openid offline_access calendars.read user.read.all'
}
当我尝试刷新访问令牌时,我收到错误:
{
"error":"invalid_grant",
"error_description":"AADSTS65001: The user or administrator has not consented to use the application with ID 'e5c0d59d-b2c8-4916-99ac-3c06d942b3e3'. Send an interactive authorization request for this user and resource.\r\nTrace ID: 2bffaa08-8c56-4872-8f9c-985417402e00\r\nCorrelation ID: c7653601-bf96-46c3-b1ff-4857fb25b7dc\r\nTimestamp: 2017-03-22 02:17:13Z",
"error_codes":[65001],
"timestamp":"2017-03-22 02:17:13Z",
"trace_id":"2bffaa08-8c56-4872-8f9c-985417402e00",
"correlation_id":"c7653601-bf96-46c3-b1ff-4857fb25b7dc"
}
即使使用标准同意,也会发生此错误。我也尝试使用node-adal库而不是原始的http请求,这会产生完全相同的结果。
我注意到“offline_access”不是我能够在MS应用程序门户中设置的权限,但是我猜我收到刷新令牌的事实意味着我可以刷新访问令牌?
对于记录,以下是我用来查看我是否做错了的节点 - 广告代码:
var self = this;
var authenticationContext = new AuthenticationContext('https://login.windows.net/common');
authenticationContext.acquireTokenWithRefreshToken(
self.refreshToken,
self.clientId,
self.clientSecret,
'https://graph.microsoft.com/',
function(a) {
console.log(a);
}
);
欢迎使用此刷新过程的任何帮助!
答案 0 :(得分:1)
请确保您用于刷新令牌的租户与您请求access_token的租户相同。
除非在下面的场景中,刷新令牌请求对我有效: