Как да разрешите „Означението за достъп е изтекло, но не можем да го опресним“ в MVC

В момента работя върху Google API, който има за цел да получи кръговете на влязъл в системата човек. Вече имам токен за достъп, но проблемът е всеки път, когато се опитам да стартирам кода си връща това изключение

Означението за достъп е изтекло, но не можем да го опресним

Как да разреша този проблем?

var claimsforUser = await UserManager.GetClaimsAsync(User.Identity.GetUserId());
var access_token = claimsforUser.FirstOrDefault(x => x.Type == "urn:google:accesstoken").Value;

string[] scopes = new string[] {PlusService.Scope.PlusLogin,
                                PlusService.Scope.UserinfoEmail,
                                PlusService.Scope.UserinfoProfile};

var flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
    {

        ClientSecrets = new ClientSecrets
        {
            ClientId = "xx-xx.apps.googleusercontent.com",
            ClientSecret = "v-xx",
        },
        Scopes = scopes,
        DataStore = new FileDataStore("Store"),
    });

var token = new TokenResponse { AccessToken = access_token, ExpiresInSeconds=50000};
var credential = new UserCredential(flow, Environment.UserName, token);


PlusService service = new PlusService(new BaseClientService.Initializer()
{
    HttpClientInitializer = credential,
    ApplicationName = "ArcaneChatV2",
});

PeopleResource.ListRequest listPeople = service.People.List("me", PeopleResource.ListRequest.CollectionEnum.Visible);
listPeople.MaxResults = 10;
PeopleFeed peopleFeed = listPeople.Execute();
var people = new List<Person>();


while (peopleFeed.Items != null)
{

    foreach (Person item in peopleFeed.Items)
    {
        people.Add(item);
    }
    if (peopleFeed.NextPageToken == null)
    {
        break;
    }
    listPeople.PageToken = peopleFeed.NextPageToken;

    // Execute and process the next page request
    peopleFeed = listPeople.Execute();

}

person Prince Jea    schedule 18.07.2016    source източник


Отговори (1)


Ако приемем, че вече имате токена за опресняване, вие включвате токена за опресняване, когато създавате TokenResponse

var token = new TokenResponse { 
    AccessToken = access_token, 
    RefreshToken = refresh_token
};

Потребителски идентификационни данни

UserCredential е безопасен за нишката помощен клас за използване на маркер за достъп за достъп до защитени ресурси. Означението за достъп обикновено изтича след 1 час, след което ще получите грешка, ако се опитате да го използвате.

UserCredential и AuthorizationCodeFlow се грижат за автоматично „опресняване“ на токена, което просто означава получаване на нов токен за достъп. Това се прави с помощта на дълготраен токен за опресняване, който получавате заедно с токена за достъп, ако използвате параметъра access_type=offline по време на потока на кода за оторизация.

В повечето приложения е препоръчително да съхранявате маркера за достъп на идентификационните данни и маркера за опресняване в постоянно хранилище. В противен случай ще трябва да представяте на крайния потребител страница за оторизация в браузъра на всеки час, тъй като токенът за достъп изтича час след като сте го получили.

person Nkosi    schedule 18.07.2016