我已经在https://apps.dev.microsoft.com注册了一个多租户应用程序,因为 Azure AD 应用程序中没有“管理员同意”提示。我们的应用程序需要管理员同意才能检索有关用户及其日历的信息。
我可以从与该应用程序注册时完全不同的租户那里获得管理员同意,并可以使用提供的访问令牌来检索所有必要的信息,但是显然一个小时后到期,因此我们需要脱机访问。
我曾尝试在https://login.windows.net/common/oauth2/token
端点中使用tenantId 而不是“common” ,但是收到与下面相同的消息。
以下是json格式提交到token端点的数据(提交前在node内转换成编码格式):
{ 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 应用程序门户中设置的权限,但是我猜我得到刷新令牌的事实意味着我可以刷新访问令牌?
作为记录,以下是我用来查看我是否做错了什么的 node-adal 代码:
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);
}
);
感谢您在此刷新过程中获得的任何帮助!
请确保您用于刷新令牌的租户与您请求 access_token 的租户相同。
除非在以下情况下,刷新令牌请求对我来说效果很好:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句