无效的授权(错误代码70000)正在刷新令牌Azure AD

时间:2019-05-31 10:55:32

标签: post login oauth-2.0 azure-active-directory

我正在使用Azure AD登录名来获取访问令牌,并能够使用其API REST向SharePoint Online发出请求。

我能够获得此访问令牌,但是,当我尝试获取刷新令牌时,出现错误。

此刻,我正在使用Postman进行测试。

我正在执行以下操作:

  • 我开始调用下一个URL来获取代码:
https://login.microsoftonline.com/{tenant}/oauth2/authorize?client_id={client_id}&client_secret={client_secret}&response_type=code
  • 收到代码后,我将执行以下POST:
POST /{tenant}/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
User-Agent: PostmanRuntime/7.13.0
Accept: */*
Cache-Control: no-cache
grant_type:authorization_code
client_id:{client_id}
client_secret:{client_secret}
code:{code_generated_previous_request}
redirect_uri:https://myapplication.com
resource:https://{mycompany}.sharepoint.com/
  • 我收到此回复:
{
    "token_type": "Bearer",
    "scope": "AllSites.FullControl Directory.ReadWrite.All Group.ReadWrite.All Sites.FullControl.All Sites.Read.All User.Invite.All User.Read.All User.ReadWrite.All",
    "expires_in": "3599",
    "ext_expires_in": "3599",
    "expires_on": "1559291698",
    "not_before": "1559287798",
    "resource": "https://{mycompany}.sharepoint.com/",
    "access_token": "XXXXXXXX...",
    "refresh_token": "YYYYYYYY...",
    "id_token": "ZZZZZZZZ..."
}
  • 最后,我尝试通过以下POST刷新令牌:
POST /{tenant}/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
User-Agent: PostmanRuntime/7.13.0
Accept: */*
Cache-Control: no-cache
grant_type:refresh_token
client_id:{client_id}
client_secret:{client_secret}
refresh_token:YYYYYYYY...
redirect_uri:https://myapplication.com
  • 但是在这一步中,我得到一个错误:
    "error": "invalid_grant",
    "error_description": "AADSTS70000: Provided grant is invalid or malformed.\r\nTrace ID: XXXX\r\nCorrelation ID: XXXXX\r\nTimestamp: 2019-05-31 09:35:39Z",
    "error_codes": [
        70000
    ],
    "timestamp": "2019-05-31 09:35:39Z",
    "trace_id": "XXXX",
    "correlation_id": "XXXX"
}

我已经检查了URL编码,不进行URL编码,删除了client_secret和redirect_uri参数以及其他内容,但是我总是遇到相同的错误。当然,我犯了一个愚蠢而明显的错误,但我看不到哪个错误。

1 个答案:

答案 0 :(得分:0)

似乎您正在尝试使用authorization coderefresh_token grant_type更新访问令牌。

我已部分再现了您遇到的错误。如下图所示:

enter image description here

可能的错误原因:

  1. 尽管确切原因未知!
  2. 我认为您粘贴的刷新令牌无效。在这种情况下 您可能会遇到此错误。
  3. 您必须粘贴先前获得的refresh_token 保持原样。确保您确实做到了。

错误的解决方案:

我正在分享实现您目标的确切方法。请查看以下步骤

步骤:1

在这种情况下,我正在使用PostMan。请启动PostMan,然后单击Authorization标签,还将Type选择为OAuth 2.0,最后单击Get New Access Token。请参见下面的屏幕截图:

enter image description here

步骤:2

当您单击Get New Access Token时,将提示新窗口,如下图所示。用您的凭据填写。

请求格式:

https://login.microsoftonline.com/{TenantId/Name}/oauth2/authorize?client_id={applicationId}&response_type=code&redirect_uri={yourURI}&response_mode=query&scope={yourScope}

enter image description here

单击Request Token按钮时,将出现提示登录窗口。使用您的凭据登录。

步骤:3

在登录之前先打开postman console,如下所示:

enter image description here

成功登录后。您会得到您的代码。

enter image description here

步骤:4

成功登录后,转到postman console request body段。只需打开它并复制您的代码即可。请参见下面的屏幕截图:

enter image description here

步骤:5

复制您的code并粘贴在authorization_code令牌请求code文本框部分上。您将获得access_token refresh_tokenid_token

请求格式:

  

client_id:{ApplicationId}

     

范围:{YourTokenScope}

     

redirect_uri:{YourAppURI}

     

grant_type:授权码

     

client_secret:{您的应用程序秘密}

     

代码:{CodeOfPreviousStep}

就像下面这样:

enter image description here

步骤:6

此步骤复制上一阶段(refresh token)中的step 5,并在请求refresh_token的同时粘贴在grant_type:refresh_token文本框旁边。作为回应,您将获得新的access_tokenrefresh_token

请求格式:

  

client_id:{ApplicationId}

     

范围:{YourTokenScope}

     

redirect_uri:{YourAppURI}

     

grant_type:refresh_token

     

client_secret:{您的应用程序秘密}

     

refresh_token:{上一步的refresh_token}

请参见以下屏幕截图:

enter image description here

  

注意:

     
      
  1. 确保您要正确处理coderefresh token
  2.   
  3. Scope对于令牌续订是可选的。您可以不续签令牌   范围,因为您的刷新令牌已经包含您的范围。
  4.   

如果您还有任何疑问,请随时分享。谢谢,祝您编程愉快!