Токен доступа не может быть обновлен. Пожалуйста, подтвердите заново

Я получаю эту ошибку при обновлении токена доступа: токен доступа не может быть обновлен. Пожалуйста, подтвердите заново

Об этой ошибке ранее сообщалось в апреле 2017 года. В документации 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); строка clientAuth = $ "client_id: {rDM.ClientID}, client_secret: {rDM.ClientSecret}"; строка accessToken = DSBase.AccessToken; строка refreshToken = DSBase.refreshToken; request.AddHeader («контроль кеширования», «без кеширования»); request.AddHeader ("тип содержимого", "приложение / 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;

person user3988148    schedule 13.10.2019    source источник


Ответы (1)


Токены обновления могут истечь, быть отозваны или отклонены. Поскольку OneLogin - это система единого входа, пользователь мог выйти из своего поставщика удостоверений, что привело к недействительности токена обновления. Вам нужно будет разработать свое программное обеспечение для обработки ошибок и крайних случаев. Сообщение об ошибке ясное, ваш пользователь должен снова пройти аутентификацию. В вашем коде нечего делать / изменять / исправлять, за исключением случая, когда вы отправляете недействительный / неправильный токен обновления.

person John Hanley    schedule 14.10.2019
comment
Я не использую SSO, и инструкции по обновлению ничего не говорят о необходимости входа в систему. Тем не менее, я добавил перехватчики кода для перенаправления, чтобы получить еще один токен доступа, когда я вижу эту ошибку. Вы хотите сказать, что если бы я вошел на сайт OneLogin, обновление сработало бы? Этот вид отрицает использование идентификатора клиента и секрета клиента. - person user3988148; 17.10.2019
comment
Я не говорю, что это сработало бы. Я объясняю, как работает OAuth и что означает ваша ошибка. - person John Hanley; 17.10.2019