【发布时间】:2020-02-10 03:19:13
【问题描述】:
刷新访问令牌时出现此错误:无法刷新访问令牌。请重新认证
此错误之前已于 2017 年 4 月报告。OneLogin 文档指出刷新令牌可使用 45 天左右。我的刷新令牌大约有 20 小时的历史。文档是正确的还是刷新令牌的寿命较短?我可以很好地获取访问令牌和撤销令牌。
公共 RootObject RefreshToken(HttpRequesterDM rDM) { RestSharp.Deserializers.JsonDeserializer deserial = new RestSharp.Deserializers.JsonDeserializer(); var client = new RestClient("https://api.us.onelogin.com/auth/oauth2/token"); var request = new RestRequest(Method.POST); string clientAuth = $"client_id:{rDM.ClientID}, client_secret:{rDM.ClientSecret}"; 字符串 accessToken = DSBase.AccessToken; 字符串 refreshToken = DSBase.refreshToken; request.AddHeader("缓存控制", "无缓存"); request.AddHeader("content-type", "application/json"); request.RequestFormat = DataFormat.Json; request.AddParameter("application/json", "{\n\"grant_type\":\"refresh_token\"\n}", ParameterType.RequestBody); request.AddHeader("授权", clientAuth);
request.AddParameter("application/json", "{\n\"access_token\":\" + accessToken + \"\n}", ParameterType.RequestBody);
request.AddParameter("application/json", "{\n\"refresh_token\":\" + refreshToken + \"\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
RootObject returnData = deserial.Deserialize<RootObject>(response);
if (returnData.status.message == "Access token cannot be refreshed. Please re-authenticate")
{
RootObject rObject = GetToken(rDM);
return rObject;
}
if (returnData.data[0].access_token != null)
{
access = returnData.data[0].access_token; //This correctly gets the Access Token. You should return this to a class variable so that all the other functions can access it easily and you're not constantly passing along the variable through them.
}
return returnData;
【问题讨论】: