Oauth 2.0 Microsoft Graph Access令牌无法获取(Javascript)

Oauth 2.0 Microsoft Graph Access令牌无法获取(Javascript),oauth-2.0,azure-active-directory,microsoft-graph-api,Oauth 2.0,Azure Active Directory,Microsoft Graph Api,我目前正在为Office365编写一个应用程序,我需要获取用户的访问令牌,一切似乎都很好,但是…:我的代码抛出了一个错误,但我的网络调试器显示它有很好的响应。。。 我不明白为什么会出现错误,即使响应正常 代码 异步getUserAccesToken(代码){ 变量资源=`https://login.microsoftonline.com/${tenantDomain}/oauth2/v2.0/token`; var令牌请求={ 客户id:clientId, 作用域:“脱机访问用户.已读”, 代码

我目前正在为Office365编写一个应用程序,我需要获取用户的访问令牌,一切似乎都很好,但是…:我的代码抛出了一个错误,但我的网络调试器显示它有很好的响应。。。 我不明白为什么会出现错误,即使响应正常

代码

异步getUserAccesToken(代码){ 变量资源=`https://login.microsoftonline.com/${tenantDomain}/oauth2/v2.0/token`; var令牌请求={ 客户id:clientId, 作用域:“脱机访问用户.已读”, 代码:代码, 重定向_uri:'http://localhost:3000/acces', 授权类型:“授权码”, 客户秘密:客户秘书 } return wait this.getEncodedPostResponse(资源、令牌请求); } 异步getEncodedPostResponse(资源,postBody){ var encodedPostBody=Object.keys(postBody).map((key)=>encodeURIComponent(key)+'='+encodeURIComponent(postBody[key])。join('&'); 调试器; 返回等待获取(资源{ 方法:“张贴”, body:encodedPostBody, 标题:新标题({ “Accept':“application/json;charset=utf-8;”, “内容类型”:“应用程序/x-www-form-urlencoded” }) }) .catch(错误=>{ 调试器; }) .then(response=>response.json()) 。然后(jsonResponse=>jsonResponse); } 错误(1/2)

错误(2/2)

我的Chrome调试器中的成功响应 有几件事:

  • 您将获得一个
    访问控制允许原点
    。您的服务器需要在其HTTP响应的标头中定义跨域调用的规则。Mozilla文档包含一篇关于此主题的优秀文章:

  • 您将访问令牌与授权代码混淆。您的
    getUserAccesToken
    实际上正在请求身份验证代码。通过向端点发出
    POST
    返回访问令牌,以将身份验证代码转换为访问令牌

  • 看起来您正试图从客户端发布
    POST
    。此呼叫属于服务器端。您的第一次呼叫通过login.microsoftonline.com请求验证代码。一旦用户进行身份验证,
    microsoftonline.com
    将用户发送到
    重定向uri
    。当您的服务器收到此请求时,它需要发出
    POST
    以获取用户的访问令牌


我有一篇文章介绍了授权代码流如何与v2端点一起工作,您可能会觉得这很有帮助:。

谢谢,我通过节点JS请求授权代码解决了这个问题