Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google API-身份验证设置和.NET客户端_Api_Authentication - Fatal编程技术网

Google API-身份验证设置和.NET客户端

Google API-身份验证设置和.NET客户端,api,authentication,Api,Authentication,我正试图使用谷歌API从我的C#客户端应用程序中实现两件事 列出我的谷歌目录的所有用户 为每个用户获取所有电子邮件的元数据 然而,我的服务帐户配置似乎给我带来了问题。这就是我所做的 在console.cloud.google.com中创建项目 从API和服务中启用管理SDK和Gmail API 创建了具有域范围委派的服务帐户,并获得了credentials.json文件 4.在admin.google.com上,我访问了安全/API控件并管理域范围的委派。从这里,我从我的服务帐户客户端id

我正试图使用谷歌API从我的C#客户端应用程序中实现两件事

  • 列出我的谷歌目录的所有用户
  • 为每个用户获取所有电子邮件的元数据
然而,我的服务帐户配置似乎给我带来了问题。这就是我所做的

  • 在console.cloud.google.com中创建项目
  • 从API和服务中启用管理SDK和Gmail API
  • 创建了具有域范围委派的服务帐户,并获得了credentials.json文件
  • 4.在admin.google.com上,我访问了安全/API控件并管理域范围的委派。从这里,我从我的服务帐户客户端id添加了新的API客户端,并分配了以下范围:

    最后,当我想要尝试检索用户列表时,我得到一个错误:预期的OAuth 2访问令牌、登录cookie或其他有效的身份验证凭据


    您不能任意从系统中没有现有令牌的用户检索数据。有效执行您尝试的操作的最简单方法是:当用户登录到您的站点时,将来自登录的电子邮件存储在您自己的数据库中,这样您就可以访问令牌以发出请求。以澄清更多信息。1.Google使用OAuth,所以我认为您不能使用基本身份验证。2.如果您遵循OAuth流程,您将需要请求一个代码,并使用该代码从服务器获取令牌。我认为服务帐户和域范围委托的目的正是为了能够执行这些操作。例如,此示例显示如何更新所有用户的电子邮件签名。也许我误解了什么?你是想获取服务帐户电子邮件还是所有使用你的应用程序的用户的电子邮件应用程序将分析我的谷歌目录中所有用户的电子邮件元数据。为此,我使用一个服务帐户1)列出我目录中的所有用户2)供每个用户分析他们的电子邮件元数据
     static void Main(string[] args)
        {
            
            using (var stream =
                new FileStream("..\\..\\..\\credentials.json", FileMode.Open, FileAccess.Read))
            {
            var credential = GoogleCredential.FromFile("..\\..\\..\\credentials.json");
    
                var dirservice = new DirectoryService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "testbuildingnomiproductname",
                });
    
                var listReq = dirservice.Users.List();
                
                Users allUsers = listReq.Execute();
    
                int counter = 0;
                foreach (User myUser in allUsers.UsersValue)
                {
                    Console.WriteLine("*" + myUser.PrimaryEmail);
                    counter++;
                }
    
                Console.WriteLine(counter);
                Console.ReadKey();
    
            }
        }