在我的控制台应用程序中,我想刷新令牌,因为一个小时后令牌失效,我正尝试实现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;
但是我得到了答复:
{“错误”:“ invalid_request”,“错误描述”:“ AADSTS900144:请求正文必须包含以下参数:'refresh_token'。\ r \ n跟踪ID:56e56b4a-92b3-445a-9fcf-972b7a481300 \ r \ n关联ID:5cb2b84b-f128-4d4f-888c-6c9a3be1d70b \ r \ n时间戳:2019-05-16 13:01:57Z“,”错误代码“:[900144],”时间戳“:” 2019-05-16 13:01 :57Z“,” trace_id“:” 56e56b4a-92b3-445a-9fcf-972b7a481300“,” correlation_id“:” 5cb2b84b-f128-4d4f-888c-6c9a3be1d70b“}
答案 0 :(得分:0)
PostSharp默认情况下以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);
答案 1 :(得分:0)
@SergeyKovalev指出,您需要在参数中添加参数类型。
request.AddParameter("refresh_token", [My_Token], ParameterType.GetOrPost);
此外,您不应该对内容类型使用表单编码,请尝试json
request.AddHeader("Content-Type", "application/json");