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


当我尝试使用服务帐户授权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();

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

提前致谢 !


9003
2018-03-14 11:22


起源

您是否已将服务帐户添加到gsuite? developers.google.com/identity/protocols/... - DaImTo
那么只有组织的管理员才能做到这一点?我只是一名员工? - Melvin
是的,我认为这只是管理员可以为您做的事情。 - DaImTo
嘿Damlm,是的,管理员必须提供访问现在它的所有解决了非常感谢 - Melvin


答案:


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

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

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


11
2018-03-14 12:01



谢谢它的工作,我把它标记为正确 - Melvin
服务帐户仅适用于GSuite,因为您必须能够预先授权服务帐户并授予其访问用户帐户的权限。无法预授权普通用户Gmail帐户。所以,你不能使用普通用户gmail帐户的服务帐户。 - DaImTo
感谢DalmTo的澄清。 - Hariprasath
我收到同样的错误,我在G Suite中为服务帐户设置了正确的授权,以便通过“googleapis.com/auth/spreadsheets”;但我仍然得到错误,任何想法? - Fabian Bosler
@DaImTo,我发现有时“将域范围的权限委托给服务帐户”需要更长的时间才能生效。通常几秒钟,但它可以超过5分钟。为什么会这样?对此问题的任何建议?谢谢。 - skyfree