Токен доступа не может быть обновлен. Пожалуйста, повторите аутентификацию - PullRequest
0 голосов
/ 13 октября 2019

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

. Об этой ошибке ранее сообщалось в апреле 2017 г. Документы OneLogin заявляют, что токен обновления действителен в течение 45 дней или около того. Моему токену обновления было около 20 часов. Правильно ли доку или токен обновления имеет более короткую продолжительность жизни? Я могу нормально получить токен доступа и отменить токен.

public RootObject RefreshToken (HttpRequesterDM rDM) {RestSharp.Deserializers.JsonDeserializer deserial = new RestSharp.Deserializers.JsonDeserializer ();var client = новый RestClient ("https://api.us.onelogin.com/auth/oauth2/token"); var request = новый RestRequest (Method.POST); строка clientAuth = $" client_id: {rDM.ClientID}, client_secret: {rDM.ClientSecret} "; строка accessToken = DSBase.AccessToken; строка refreshToken = DSBase.refreshToken; request.AddHeader ("cache-control", "no-cache"); 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;

1 Ответ

0 голосов
/ 14 октября 2019

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

...