Outlook Office 365:刷新令牌无法检索,因为" AADSTS70000" “'代码”的提供值参数无效

时间:2016-05-19 10:41:52

标签: oauth outlook oauth-2.0 office365 access-token

在下面的代码中,我可以从email@company.com电子邮件地址成功检索刷新令牌。但是,当我尝试使用email@outlook.com登录时,它不会提供刷新令牌,而是返回此响应。

响应:

{
  "error": "invalid_grant",
  "error_description": "AADSTS70000: The provided value for the 'code' parameter is not valid. The code has expired.\r\nTrace ID: ...\r\nCorrelation ID: ...\r\nTimestamp: 2016-05-19 10:13:05Z",
  "error_codes": [
    70000
  ],
  "timestamp": "2016-05-19 10:13:05Z",
  "trace_id": "8cceb393-....",
  "correlation_id": "5227de8...."
}

代码:

 private async Task<string> GetRefreshRoken(string authCode, string onSuccessRedirectUri) {
        var client = new HttpClient();
        var parameters = new Dictionary<string, string>
       {
          {"client_id", _clientId},
          {"client_secret", _clientSecret},
          {"code",authCode }, // what retreived from //https://login.microsoftonline.com/common with authroization.
          {"redirect_uri",  onSuccessRedirectUri}, //http://localhost:27592/Home/Authorize
          {"grant_type","authorization_code" }
       };
        var content = new FormUrlEncodedContent(parameters);
        var response = await client.PostAsync("https://login.microsoftonline.com/common/oauth2/v2.0/token", content);
        var tokensJsonString = await response.Content.ReadAsStringAsync();
        dynamic token = Newtonsoft.Json.JsonConvert.DeserializeObject(tokensJsonString);
        return token.refresh_token;
    }

所以我用Google搜索了错误编号,找到了错误描述的http://www.matvelloso.com/2015/01/30/troubleshooting-common-azure-active-directory-errors/页面: enter image description here

然后我将我的重定向网址更改为&#34; http://localhost:27592/Home/Authorize/&#34;。由于我使用此https://dev.outlook.com/restapi/tutorial/dotnet教程作为参考,现在我无法使用任何其他帐户登录。

enter image description here

有没有什么好方法可以为Outlook帐户检索刷新令牌?

1 个答案:

答案 0 :(得分:4)

对于Windows Live ID帐户,您将收到错误&#34; &#39;代码提供的值&#39;参数无效。代码已过期。&#34;使用授权码两次时。

刷新令牌的正确方法是使用刷新令牌(v2.0 token reference > Refresh Token)

首先,确保您已声明范围&#34; offline_access&#34;。

然后,当使用grant_type = code(第一次获取令牌)获取令牌时,您将获得access_token。

接下来,您需要使用grant_type = refresh_token来刷新访问令牌。

enter image description here