客户未经授权使用此方法检索访问令牌Gmail API C#

Mel*_*vin 18 c# gmail-api

当我尝试使用服务帐户授权gmail api时,我收到以下错误

"客户端未经授权使用此方法检索访问令牌"

static async Task MainAsync()
    {

        sstageEntities db = new sstageEntities();
        //UserCredential credential;
        Dictionary<string, string> dictionary = new Dictionary<string, string>();    
String serviceAccountEmail =
"xxx.iam.gserviceaccount.com";

        var certificate = new X509Certificate2(
            AppDomain.CurrentDomain.BaseDirectory +
              "xxx-8c7a4169631a.p12",
            "notasecret",
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable);

        //string userEmail = "user@domainhere.com.au";

        ServiceAccountCredential credential = new ServiceAccountCredential(
            new ServiceAccountCredential.Initializer(serviceAccountEmail)
            {
                User = "xxx@xxx.com",
                Scopes = new[] { "https://mail.google.com/" }
            }.FromCertificate(certificate)
        );


        // Create Gmail API service.
        var gmailService = new GmailService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = ApplicationName,
        });

        // Define parameters of request.

        var emailListRequest = gmailService.Users.Messages.List("xxx@xxx.com");
        emailListRequest.LabelIds = "INBOX";
        emailListRequest.IncludeSpamTrash = true;
        emailListRequest.Q = "from:bpm@xxx.co.in is:unread";



        //Get our emails
        var emailListResponse = await emailListRequest.ExecuteAsync();
Run Code Online (Sandbox Code Playgroud)

我正在使用创建服务帐户时获得的p12键.但是当我运行我的控制台应用程序时,会发生以下错误.任何帮助都将非常感激.

提前致谢 !

DaI*_*mTo 21

服务帐户需要获得授权,或者无法访问域的电子邮件.

"客户端未经授权使用此方法检索访问令牌"

表示您未正确授权它检查将域范围的权限委派给服务帐户

  • 服务帐户仅适用于GSuite,因为您必须能够预先授权服务帐户并授予其访问用户帐户的权限.无法预授权普通用户Gmail帐户.所以,你不能使用普通用户gmail帐户的服务帐户. (4认同)
  • @DaImTo,我发现有时"将域范围的权限委托给服务帐户"需要更长的时间才能生效.通常几秒钟,但它可以超过5分钟.为什么会这样?对此问题的任何建议?谢谢. (3认同)
  • 重要说明:在 G Suite 管理中的“管理 API 客户端访问”页面上添加服务帐户及其范围之前,必须启用“向服务帐户委派全域权限”。否则会失败并需要重新添加。 (3认同)
  • @boydenhartog 你不应该这样做,这是不允许的。普通 Gmail 帐户不支持服务帐户。您需要使用 oauth2 并验证您的帐户一次,然后使用刷新令牌再次访问它。 (2认同)