【问题标题】:How to access the Google API with different user accounts? (ASP.NET MVC)如何使用不同的用户帐户访问 Google API? (ASP.NET MVC)
【发布时间】:2020-05-27 09:00:20
【问题描述】:

我正在用 ASP.NET MVC (C#) 开发一个 Web 应用程序,它与 Google Drive API 配合使用。我已经解决了使用 OAuth 2.0 进行身份验证的整个问题,并且我正在完美地使用 API。问题是,在登录并授予我的应用程序工作权限后,如果我从另一台计算机访问我网站的 URL,它不会请求授权,而是使用最初已经通过身份验证的帐户。

换句话说,我需要能够访问我的网站并使用不同的用户帐户使用 Google 云端硬盘。每个人都在其中进行身份验证并使用他们的 Google Drive。

代码如下:

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

【问题讨论】:

    标签: c# google-api google-drive-api google-oauth google-api-dotnet-client


    【解决方案1】:
    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                Scopes,
                "user",
                CancellationToken.None,
                new FileDataStore(FilePath, true)).Result;
        }
    

    文件数据存储将当前登录用户的凭据存储到由“用户”表示的机器上的 %appdata% 中。因此,如果您想要一个以上的用户,那么您需要将“用户”更改为其他用户。

    请注意,GoogleWebAuthorizationBroker.AuthorizeAsync 用于已安装的应用程序,它将在用户计算机上打开授权浏览器,这不能用于托管网站,它将尝试打开 Web 浏览器以供用户在服务器上进行身份验证不会工作。

    使用

    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-applications-asp.net-mvc

    【讨论】:

    • @DalmTo 你知道有什么例子吗?
    • @DalmoTo 我无法让它工作。我什至没有得到身份验证屏幕。从哪里调用 IndexAsync 方法?
    • 这是唯一的例子,我很抱歉多年来没有做过 MVC,所以我不会有太大帮助。
    猜你喜欢
    • 2020-04-13
    • 2014-02-01
    • 2018-10-06
    • 2013-08-30
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2017-06-26
    • 2016-08-08
    相关资源
    最近更新 更多