2017-07-03 23 views
1

我一直在审查这里的应用程序授权步骤https://developer.microsoft.com/en-us/graph/docs/authorization/app_authorization,但似乎无法获得工作请求。我始终得到错误说Microsoft身份验证:如何使用ajax post来刷新访问令牌?

对预检请求的响应未通过访问控制检查:请求的资源上没有“Access-Control-Allow-Origin”标头。因此,原产地“http://localhost:8080”是不允许访问。”

这似乎不可思议,因为我包括头。

$.ajax({ 
      type: "POST", 
      url: url, 
      crossDomain: true, 
      data: { 
       'refreshToken': refreshToken, 
       'client_id': clientId, 
       'client_secret': clientSecret, 
       'redirect_uri': redirect_uri, 
       'resource': resource 
      }, 
      dataType: 'json', 
      beforeSend: function (xhr) { 
       xhr.setRequestHeader('Access-Control-Allow-Origin', "*"); 
       xhr.setRequestHeader('Access-Control-Allow-Methods', "*"); 
       xhr.setRequestHeader('Access-Control-Allow-Headers', "*"); 
      }, 
      success: function (data, status, headers, config) { 
       callback(data); 
      }, 
      error: function (data, status, headers, config) { 
       console.log('Error getting access token from Microsoft Graph: ' + status + " " + JSON.stringify(data)); 
      } 
     }); 

回答

1

您使用的是错误的OAuth2流程。你不应该使用的授权盛大码因为当浏览器请求重定向URL(令牌不在URL的哈希#部分中)时,您无法保持客户机密安全并且令牌到达服务器。

这就是为什么Microsoft API不支持XHR访问/token端点(通过省略CORS响应标头)。

您可以考虑使用专为浏览器使用而设计的隐式流程,使标记保持安全并且不需要客户机密。

+0

当尝试使用隐式授权工作流端点进行身份验证时,出现相同的“Access-Control-Allow-Origin”错误。 – user3707850

+0

您不能对'/ auth'端点使用XHR请求。这是OAuth2背后的基本理念 - 用户必须重定向到OAuth2服务器,并通过身份验证并重新导向回。所以客户端(您的应用程序)无法看到用户的密码。 XHR请求无法做到这一点。 –

相关问题