2017-06-02 5 views
0

Ich habe ein OAuth2 Token so ...Wie erstelle ich ein GoogleCredential von einem autorisierten access_token?

{{ 
    "access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
    "expires_in": "3600", 
    "refresh_token": "xxxxxxxxxxxxxxxxxx", 
    "token_type": "Bearer", 
}} 

und ich versuche, ein DriveService Objekt zu erstellen ...

Service = new DriveService(new BaseClientService.Initializer() 
{ 
    HttpClientInitializer = credential, 
    ApplicationName = "foo", 
}); 

(wie das?)

aber ich mache das eindeutig nicht richtig und ich habe Probleme, Unterlagen zu finden.

Wenn ich versuche, eine GoogleCredential zu schaffen, um die DriveService

GoogleCredential credential = GoogleCredential.FromJson(credentialAsSerializedJson).CreateScoped(GoogleDriveScope); 

ich die folgende Ausnahme erhalten passieren:

{System.InvalidOperationException: Fehler beim Erstellen der Berechtigungsnachweis von JSON. Unbekannter Anmeldeinformationstyp

Gehe ich das völlig falsch?

(Dies ist the sample code context)

+0

Ich bin mit C# nicht vertraut, aber ich denke, es gibt einen Leitfaden für [OAuth 2.0 in C#] (https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web- applications-aspnet-mvc) unterstützt Sie beim Erstellen eines driveService mit einem autorisierten access_token. Dies bietet auch eine Anleitung zur Unterscheidung von Benutzeranmeldeinformationen und ServiceAccountCredential. Hoffe das hilft. –

Antwort

1

Ich habe es geschafft, dies herauszufinden.

Die Lösung war ein Google.Apis.Auth.OAuth2.Flows.GoogleAuthorizationCodeFlow mit meinem ClientID und ClientSecret ...

Google.Apis.Auth.OAuth2.Flows.GoogleAuthorizationCodeFlow googleAuthFlow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer() 
{ 
    ClientSecrets = new ClientSecrets() 
    { 
    ClientId = ClientID, 
    ClientSecret = ClientSecret, 
    } 
}); 

und auch ein Google.Apis.Auth.OAuth2.Responses.TokenResponse zu erstellen:

Google.Apis.Auth.OAuth2.Responses.TokenResponse responseToken = new TokenResponse() 
{ 
    AccessToken = SavedAccount.Properties["access_token"], 
    ExpiresInSeconds = Convert.ToInt64(SavedAccount.Properties["expires_in"]), 
    RefreshToken = SavedAccount.Properties["refresh_token"], 
    Scope = GoogleDriveScope, 
    TokenType = SavedAccount.Properties["token_type"], 
}; 

und jeweils ein UserCredential erstellen verwenden, die wiederum, , zum Initialisieren des DriveService ...

var credential = new UserCredential(googleAuthFlow, "", responseToken); 

Service = new DriveService(new BaseClientService.Initializer() 
{ 
    HttpClientInitializer = credential, 
    ApplicationName = "com.companyname.testxamauthgoogledrive", 
}); 

Ich habe die TestXamAuthGoogleDrive test harness project aktualisiert, um diese Änderungen widerzuspiegeln.

Verwandte Themen