Microsoft Graph API - 无法刷新访问令牌

时间:2017-03-22 02:52:49

标签: node.js azure graph microsoft-graph

我已在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);
    }
);

欢迎使用此刷新过程的任何帮助!

1 个答案:

答案 0 :(得分:1)

请确保您用于刷新令牌的租户与您请求access_token的租户相同。

除非在下面的场景中,刷新令牌请求对我有效:

  1. 使用Microsoft帐户从protal注册应用程序
  2. user1在tenant1
  3. 将user1作为外部用户添加到tenant2
  4. 从tenant1(OK)
  5. 请求access_token / refresh_token
  6. 尝试使用请求中的tenant1刷新令牌(确定)
  7. 尝试使用请求中的tenant2刷新令牌(相同的错误消息)