Как создать экземпляр UserCredential, если у меня уже есть значение токена доступа?

Итак, у меня есть этот код
У меня вопрос, как мне настроить UserCredential, если я уже аутентифицирован через OAuth?

В текущем сценарии код будет отображать другую страницу входа, перенаправляя на Google. Поскольку я уже прошел аутентификацию через OAuth с использованием asp.net MVC, и у меня уже есть токен, как мне избавиться от GoogleWebAuthorizationBroker и напрямую передать токен?

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

Я просто новичок в такого рода вещах.

1 ответ

Решение

Предполагая, что у вас уже есть токены, вы можете сделать следующее

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

Затем вы можете передать свои учетные данные инициализатору сервиса

Ссылка на клиентские библиотеки Google API> .NET > OAuth 2.0

Мы можем создать GoogleCredential непосредственно из токена доступа и использовать его вместо UserCredentialтакже. Я просто думаю, что это может быть кому-то полезно. Вот фрагмент кодаGmailService инициализация:

GoogleCredential cred = GoogleCredential.FromAccessToken(accessToken);
GmailService service = new GmailService(new BaseClientService.Initializer {HttpClientInitializer = cred});
Другие вопросы по тегам