1

Я пытаюсь сделать веб-приложение ASP.NET MVC 5, с помощью которого я могу аутентифицировать пользователя с учетной записью Google, а затем читать данные из своих электронных таблиц, хранящихся в Google Диске/Google Листы.Повторное использование учетных данных Google API в API GData

Я использую Google API для аутентификации пользователя. После того, как пользователь успешно прошел проверку подлинности, я получаю полномочия обратно от Google в объекте, который имеет тип Google.Apis.Auth.OAuth2.Web AuthResult.UserCredential

Затем я могу успешно создать службу список файлов с Диска, используя код, аналогичный

var driveService = new DriveService(new BaseClientService.Initializer { HttpClientInitializer = result.Credential, ApplicationName = "ASP.NET MVC Sample" });

Теперь я хочу использовать API GData для чтения содержимого из электронных таблиц на Диске. Для этого мне нужно иметь объект SpreadsheetsService, а затем установить его параметр RequestFactory в экземпляр GOAuth2RequestFactory, и для этого в свою очередь требуются параметры OAuth2, которые должны быть указаны в экземпляре класса OAuth2Parameters.

Как я могу повторно использовать учетные данные, полученные с помощью Google Api в API GData?

+0

почему бы не просто создать SpreadsheetsService? пока области, используемые при создании ваших учетных данных, позволяют использовать как диск, так и SpreadsheetsService, нет причин, по которым вы не можете создать оба. – DaImTo

+0

Я создал «SpreadsheetsService». Я не хочу снова запускать цикл проверки подлинности. Я ищу способ использования учетных данных из API в GData. –

+0

Не думайте, что я понимаю, что проблема с созданием новой службы не запускает проверку подлинности снова. У вас есть result.credentials, просто используйте ее в обоих. – DaImTo

ответ

1

Я уже делаю, что вы хотите сделать,

код для того, как я сдал GData жетоны Issue with OAuth2 authentication with google spreadsheet

т.е. я использую один доступ OAuth2/обновить маркер набора. Использование одних и тех же токенов для вызовов gdata & вызовов API-интерфейса.

0

Это код, который, наконец, работал для меня

public class AppFlowMetadata : FlowMetadata 
     { 
      private static readonly IAuthorizationCodeFlow flow = 
       new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer 
       { 
        ClientSecrets = new ClientSecrets 
        { 
         ClientId = "randomstring.apps.googleusercontent.com", 
         ClientSecret = "shhhhhh!" 
        }, 
        Scopes = new[] { DriveService.Scope.Drive, "https://spreadsheets.google.com/feeds", "https://docs.google.com/feeds", "https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/userinfo.profile" }, 
        DataStore = new FileDataStore("Drive.Api.Auth.Store") 
       }); 

      public override string GetUserId(Controller controller) 
      { 

       var user = controller.Session["user"]; 
       if (user == null) 
       { 
        user = Guid.NewGuid(); 
        controller.Session["user"] = user; 
       } 
       return user.ToString(); 
      } 

      public override IAuthorizationCodeFlow Flow { get { return flow; } } 

     } 

И затем, в контроллере, параметры OAuth2 были скопированы GData

var result = await new AuthorizationCodeMvcApp(this, new AppFlowMetadata()). 
       AuthorizeAsync(cancellationToken); 
OAuth2Parameters parameters = new OAuth2Parameters(); 
       parameters.ClientId = "somestring.apps.googleusercontent.com"; 
       parameters.ClientSecret = "shhhhhh!"; 
       parameters.Scope = result.Credential.Token.Scope; 
       parameters.AccessToken = result.Credential.Token.AccessToken; 
       parameters.RefreshToken = result.Credential.Token.RefreshToken; 

       GOAuth2RequestFactory requestFactory = new GOAuth2RequestFactory(null, "MySpreadsheetIntegration-v1", parameters); 

       SpreadsheetsService service = new SpreadsheetsService("MySpreadsheetIntegration-v1"); 
       service.RequestFactory = requestFactory; 

 Смежные вопросы

  • Нет связанных вопросов^_^