1

Ich arbeite derzeit an Google Api, die die Kreise einer geloggten Person zu bekommen. Ich habe bereits die Zugriffstoken aber das Problem ist, wenn ich versuche, meinen Code es gibt diese AusnahmeWie zu beheben 'Das Zugriffstoken ist abgelaufen, aber wir können es nicht aktualisieren' in MVC

das Zugriffstoken abgelaufen ist zu laufen, aber wir können es nicht aktualisieren

Wie kann ich dieses Problem beheben?

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(); 

} 

Antwort

1

Sie bereits über die Aktualisierungs-Token haben Angenommen, schließen Sie das Aktualisierungs-Token, wenn Sie die TokenResponse

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

User Credentials

UserCredential ist ein Thread-sichere Hilfsklasse schaffen für Verwenden eines Zugriffstokens , um auf geschützte Ressourcen zuzugreifen. Ein Zugriffstoken läuft normalerweise nach 1 Stunde ab. Danach erhalten Sie einen Fehler, wenn Sie versuchen, es zu verwenden.

UserCredential und AuthorizationCodeFlow kümmern sich automatisch um "Auffrischen" des Tokens, was einfach bedeutet, ein neues Zugriffs-Token zu bekommen. Dies geschieht mit einem langlebigen Aktualisierungstoken, das Sie zusammen mit dem Zugriffstoken unter erhalten, wenn Sie während des Autorisierungscode-Ablaufs den access_type = offline-Parameter verwenden.

In den meisten Anwendungen ist es ratsam, den Token und das Aktualisierungstoken des Berechtigungsnachweises im permanenten Speicher zu speichern. Ansonsten müssen Sie dem Endbenutzer jede Stunde eine Berechtigungsseite im Browser vorlegen, da das Zugriffstoken eine Stunde abläuft, nachdem Sie empfangen haben.

Verwandte Themen