Search code examples
c#asp.net-mvcgoogle-api-dotnet-clientgoogle-plus-domains

How to create a instance of UserCredential if I already have the value of Access Token?


So I have this code
My question is how do I configure the UserCredential if I'm already authenticated via OAuth?

The current scenario is the code will display another login page redirecting to google. Since I'm already authenticated via OAuth using asp.net MVC and I already have the token how to I get rid of the GoogleWebAuthorizationBroker and directly pass the token?

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

UserCredential credential = 
GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets
{
    ClientId = "xxx.apps.googleusercontent.com",
    ClientSecret = "xxxx"
},
    scopes,
    Environment.UserName,
    CancellationToken.None,
    new FileDataStore("Store")).Result;

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

I'm just new to this kind of stuff.


Solution

  • Assuming you already have the tokens you can do the following

    string[] scopes = new string[] {
        PlusService.Scope.PlusLogin,
        PlusService.Scope.UserinfoEmail,
        PlusService.Scope.UserinfoProfile
    };
    
    var flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
    {
        ClientSecrets = new ClientSecrets
        {
            ClientId = "xxx.apps.googleusercontent.com",
            ClientSecret = "xxxx"
        },
        Scopes = scopes,
        DataStore = new FileDataStore("Store")
    });
    
    var token = new TokenResponse { 
        AccessToken = "[your_access_token_here]",
        RefreshToken = "[your_refresh_token_here]"
    };
    
    var credential = new UserCredential(flow, Environment.UserName, token); 
    

    Then you can pass your credentials to the service's initializer

    Reference Google API Client Libraries > .NET > OAuth 2.0