使用 restsharp 刷新令牌

Refresh token with restsharp

在我的控制台应用程序中,我想刷新一个令牌,因为一个小时后令牌经验,我正在尝试实现 Refreshing a Token 部分,我的代码如下:

 var client = new RestClient("https://login.microsoftonline.com/common/oauth2/v2.0/token");
 var request = new RestRequest(Method.POST);
 request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
 request.AddParameter("grant_type", "refresh_token");
 request.AddParameter("refresh_token", [My_Token]);
 request.AddParameter("client_id", [My_ClientId]);
 request.AddParameter("client_secret", [My_ClientSecret]);
 request.AddParameter("scope", "offline_access");
 request.AddParameter("redirect_uri", "urn:ietf:wg:oauth:2.0:oob");
 IRestResponse response = client.Execute(request);
 var content2 = response.Content;

但我收到了回复:

{"error":"invalid_request","error_description":"AADSTS900144: The request body must contain the following parameter: 'refresh_token'.\r\nTrace ID: 56e56b4a-92b3-445a-9fcf-972b7a481300\r\nCorrelation ID: 5cb2b84b-f128-4d4f-888c-6c9a3be1d70b\r\nTimestamp: 2019-05-16 13:01:57Z","error_codes":[900144],"timestamp":"2019-05-16 13:01:57Z","trace_id":"56e56b4a-92b3-445a-9fcf-972b7a481300","correlation_id":"5cb2b84b-f128-4d4f-888c-6c9a3be1d70b"}

RestSharp 默认在 JSON 或 XML 中序列化正文。您需要 GetOrPost 来修复 https://github.com/restsharp/RestSharp/wiki/ParameterTypes-for-RestRequest#getorpost

 request.AddParameter("grant_type", "refresh_token", ParameterType.GetOrPost);
 request.AddParameter("refresh_token", [My_Token], ParameterType.GetOrPost);
 request.AddParameter("client_id", [My_ClientId], ParameterType.GetOrPost);
 request.AddParameter("client_secret", [My_ClientSecret], ParameterType.GetOrPost);
 request.AddParameter("scope", "offline_access", ParameterType.GetOrPost);
 request.AddParameter("redirect_uri", "urn:ietf:wg:oauth:2.0:oob", ParameterType.GetOrPost);

正如@SergeyKovalev 指出的那样,您需要将参数类型添加到您的参数中。

 request.AddParameter("refresh_token", [My_Token], ParameterType.GetOrPost);

此外,您不应该为您的内容类型使用表单编码,请尝试 json

request.AddHeader("Content-Type", "application/json");