如何在客户端启动 GMAIL Api 身份验证? [复制]

Posted

技术标签:

【中文标题】如何在客户端启动 GMAIL Api 身份验证? [复制]【英文标题】:How to initiate GMAIL Api Authentication on client side? [duplicate] 【发布时间】:2021-02-11 18:59:41 【问题描述】:

我有一个由服务器处理的应用程序来请求大量电子邮件(10-30k 电子邮件),但是当通过 API 使用 google 进行身份验证时,该窗口在服务器上打开,而不是在客户端上打开。 为了简化请求是在本地发出的(所以在服务器上)。

那么我怎样才能在服务器上发出请求并在客户端上获取 google 的身份验证窗口?

这是我的代码:

Public Bool Connect()

    MemoryStream memoryStream;
    GoogleClientSecrets googleClientSecrets;
    string credentialPath;
    List<string> scopes = new List<string>();
    UserCredential userCredential;

    try
    
        memoryStream = new MemoryStream(credentialKeyFile);
        googleClientSecrets = GoogleClientSecrets.Load(memoryStream);
    
    catch (Exception exception)
    
        return false;
    
    try
    
        credentialPath = Path.Combine(credentialsPath, account);
        scopes.Add(GmailService.Scope.MailGoogleCom);
        userCredential = GoogleWebAuthorizationBroker.AuthorizeAsync(
            googleClientSecrets.Secrets,
            scopes.ToArray(),
            account + ".json",
            CancellationToken.None,
        new FileDataStore(credentialPath, true) 
                        ).Result;
    
    catch (Exception exception)
    
        return false;
    
    if (userCredential == null)
    
        GlobalMethods.AddLog("L'authentification à l'API Google a échoué.");
        return false;
    
    try
    
        accountGmailService = new GmailService(new BaseClientService.Initializer()
        
            HttpClientInitializer = userCredential
        );
    
    catch (Exception exception)
    
        return false;
    
    if (accountGmailService == null)
    
        return false;
    
                return true;

【问题讨论】:

这是一个 asp.net 应用程序吗?不太清楚 不是 ASP.net,而是 C# 应用程序 如果它是一个应用程序,那么用户需要将它安装在他们的机器上,然后您就可以使用您拥有的代码。如果你想托管它,那么你应该使用 asp .net 并将其作为网络应用程序发布。 是的,昨天的问题已被删除。在我有机会向他解释问题是什么之前。即使在 OP 编辑​​了他的问题并添加了我要求的代码之后。 ***.com/q/64573922/1841839我不知道他为什么一直在这个问题上得到-1 @DaImTo 同意这没有帮助,似乎管理员可能没有真正正确地阅读它。不幸的是,我看到这种情况经常发生。但它仍然可以重新打开。不管怎样,现在已经完成了,这个问题照原样很好。 【参考方案1】:

GoogleWebAuthorizationBroker.AuthorizeAsync 设计用于已安装的应用程序,它将在运行代码的机器上打开授权和身份验证屏幕。

没有办法让服务器端应用程序运行并要求用户连接用户需要启动连接。这样做的唯一方法是将其部署为 Web 应用程序并使用以下代码。

对于网络应用程序,您应该使用 GoogleAuthorizationCodeFlow,并在以下示例中找到 Web applications (ASP.NET MVC) 这将导致授权窗口在用户网络浏览器而不是服务器上打开。

using System;
using System.Web.Mvc;

using Google.Apis.Auth.OAuth2;
using Google.Apis.Auth.OAuth2.Flows;
using Google.Apis.Auth.OAuth2.Mvc;
using Google.Apis.Drive.v2;
using Google.Apis.Util.Store;

namespace Google.Apis.Sample.MVC4

    public class AppFlowMetadata : FlowMetadata
    
        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")
                );

        public override string GetUserId(Controller controller)
        
            // In this sample we use the session to store the user identifiers.
            // That's not the best practice, because you should have a logic to identify
            // a user. You might want to use "OpenID Connect".
            // You can read more about the protocol in the following link:
            // https://developers.google.com/accounts/docs/OAuth2Login.
            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; 
        
    

【讨论】:

以上是关于如何在客户端启动 GMAIL Api 身份验证? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有手动浏览器身份验证的情况下从 Meteor.js 应用程序对 GMail-api 进行 oauth (2) 身份验证?

通过浏览器身份验证和休息请求 - Gmail API

似乎无法通过 Gmail API 进行身份验证以阅读电子邮件

如何在客户端中使用 Firebase Auth gmail 保护 NestJS 中的 API?

如何使用 Twisted 通过 OAuth2.0 身份验证检查 Gmail

谷歌 gmail api oauth2 身份验证错过了解