Как получить доступ к Google API с разными учетными записями пользователей? (ASP. NET MVC) - PullRequest
2 голосов
/ 27 мая 2020

Я разрабатываю веб-приложение на ASP. NET MVC (C #), которое работает с Google Drive API. У меня возникла проблема аутентификации с использованием OAuth 2.0, и я отлично работаю с API. Проблема в том, что после входа в систему и предоставления моему приложению разрешений на работу, если я получаю доступ к URL-адресу своего веб-сайта с другого компьютера, он не запрашивает авторизацию, а вместо этого работает с учетной записью, которая сначала уже была аутентифицирована.

Другими словами, мне нужно иметь доступ к своему веб-сайту и работать с Google Диском с разными учетными записями пользователей. Где каждый аутентифицируется и работает со своим Google Диском.

Код следующий:

public static Google.Apis.Drive.v3.DriveService GetService_v3()
{
    UserCredential credential;
    using (var stream = new FileStream(HostingEnvironment.MapPath("~/client_secret.json"), FileMode.Open, FileAccess.Read))
    {
        String FolderPath = HostingEnvironment.MapPath("~");
        String FilePath = Path.Combine(FolderPath, "DriveServiceCredentials.json");

        credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.Load(stream).Secrets,
            Scopes,
            "user",
            CancellationToken.None,
            new FileDataStore(FilePath, true)).Result;
    }

    //Create Drive API service.
    Google.Apis.Drive.v3.DriveService service = new Google.Apis.Drive.v3.DriveService(new BaseClientService.Initializer()
    {
        HttpClientInitializer = credential,
        ApplicationName = "GoogleDriveRestAPI-v3",
    });

    return service;
}

1 Ответ

0 голосов
/ 27 мая 2020
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            GoogleClientSecrets.Load(stream).Secrets,
            Scopes,
            "user",
            CancellationToken.None,
            new FileDataStore(FilePath, true)).Result;
    }

Файловое хранилище данных хранит учетные данные текущего вошедшего в систему пользователя в% appdata% на машине, обозначенной «пользователем». Поэтому, если вам нужно более одного пользователя, вам нужно сменить «user» на что-то другое.

Обратите внимание, что GoogleWebAuthorizationBroker.AuthorizeAsyn c используется для установленных приложений, он откроет браузер авторизации на компьютере пользователя. это не может использоваться для хостинга веб-сайта, он попытается открыть веб-браузер для аутентификации пользователя на сервере, что не будет работать.

используйте

private static readonly IAuthorizationCodeFlow flow =
        new GoogleAuthorizationCodeFlow(new 

GoogleAuthorizationCodeFlow.Initializer
                {
                    ClientSecrets = new ClientSecrets
                    {
                        ClientId = "PUT_CLIENT_ID_HERE",
                        ClientSecret = "PUT_CLIENT_SECRET_HERE"
                    },
                    Scopes = new[] { DriveService.Scope.Drive },
                    DataStore = new FileDataStore("Drive.Api.Auth.Store")
                });

web -приложения- asp. net - mvc

...