我正在使用Azure AD登录名来获取访问令牌,并能够使用其API REST向SharePoint Online发出请求。
我能够获得此访问令牌,但是,当我尝试获取刷新令牌时,出现错误。
此刻,我正在使用Postman进行测试。
我正在执行以下操作:
https://login.microsoftonline.com/{tenant}/oauth2/authorize?client_id={client_id}&client_secret={client_secret}&response_type=code
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 /{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参数以及其他内容,但是我总是遇到相同的错误。当然,我犯了一个愚蠢而明显的错误,但我看不到哪个错误。
答案 0 :(得分:0)
似乎您正在尝试使用authorization code
和refresh_token
grant_type更新访问令牌。
我已部分再现了您遇到的错误。如下图所示:
可能的错误原因:
refresh_token
保持原样。确保您确实做到了。错误的解决方案:
我正在分享实现您目标的确切方法。请查看以下步骤
步骤:1
在这种情况下,我正在使用PostMan
。请启动PostMan,然后单击Authorization
标签,还将Type
选择为OAuth 2.0
,最后单击Get New Access Token
。请参见下面的屏幕截图:
步骤: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}
单击Request Token
按钮时,将出现提示登录窗口。使用您的凭据登录。
步骤:3
在登录之前先打开postman console
,如下所示:
成功登录后。您会得到您的代码。
步骤:4
成功登录后,转到postman console
request body
段。只需打开它并复制您的代码即可。请参见下面的屏幕截图:
步骤:5
复制您的code
并粘贴在authorization_code
令牌请求code
文本框部分上。您将获得access_token
refresh_token
和id_token
请求格式:
client_id:{ApplicationId}
范围:{YourTokenScope}
redirect_uri:{YourAppURI}
grant_type:授权码
client_secret:{您的应用程序秘密}
代码:{CodeOfPreviousStep}
就像下面这样:
步骤:6
此步骤复制上一阶段(refresh token
)中的step 5
,并在请求refresh_token
的同时粘贴在grant_type:refresh_token
文本框旁边。作为回应,您将获得新的access_token
和refresh_token
请求格式:
client_id:{ApplicationId}
范围:{YourTokenScope}
redirect_uri:{YourAppURI}
grant_type:refresh_token
client_secret:{您的应用程序秘密}
refresh_token:{上一步的refresh_token}
请参见以下屏幕截图:
注意:
- 确保您要正确处理
code
和refresh token
Scope
对于令牌续订是可选的。您可以不续签令牌 范围,因为您的刷新令牌已经包含您的范围。
如果您还有任何疑问,请随时分享。谢谢,祝您编程愉快!