GMail API Super Admin会通过API访问其他用户帐户吗?

时间:2015-06-11 16:46:02

标签: google-api gmail-api google-api-dotnet-client

我的机构目前正在运行Google Apps for Education。我负责创建,删除,修改等学生电子邮件帐户。我已将所有现有的C#应用​​程序从GData转换为新的Admin SDK - 生活很美好。

上周,其中一个部门向大约800名学生发送了一封包含错误的电子邮件。我被问到是否可以创建一个能够删除800个学生收件箱的电子邮件的快速应用程序。

使用我的“超级管理员”域帐户我可以使用Gmail API创建一个应用程序,以进入我的收件箱并选择符合特定条件的特定电子邮件;示例:from:xxxx@domain.edu AND is:unread AND subject:test我能够返回消息ID的集合,然后我可以从收件箱中删除它们 - 太棒了!

由于我能够在我的收件箱中执行此操作,因此我认为我会进行另一项测试并插入其中一个800个电子邮件地址并获得相同的结果。不幸的是我收到了这条错误消息:

  

错误:Google.Apis.Requests.RequestError   代表团否认xxxxx@domain.edu [403]   错误[消息[委托被拒绝xxxxx@domain.edu]位置[ - ]原因[禁止]域名[全球]]

我确实阅读了有关帐户委派的内容,但这需要我的“超级管理员”帐户发送请求,并且学生接受该请求。

可能是域名的“超级管理员”在任何收件箱中都没有这些权限,除了他们自己的?我试过阅读帖子和谷歌的文档,但我似乎无法找到关于这个主题的答案。

在此桌面应用程序的开发者控制台中启用了Gmail API。

我正在使用的服务帐户已获得授权,并且在C#应用程序中使用的是正确的范围:

Scopes = new[] { 
                        "https://mail.google.com",
                    GmailService.Scope.GmailCompose,
                    GmailService.Scope.GmailInsert,
                    GmailService.Scope.GmailLabels,
                    GmailService.Scope.GmailModify,
                    GmailService.Scope.GmailReadonly,
                    GmailService.Scope.MailGoogleCom,
                    "https://www.googleapis.com/auth/userinfo.email",
                    "https://www.googleapis.com/auth/userinfo.profile"},

我的C#代码:

List<Google.Apis.Gmail.v1.Data.Message> result = new List<Google.Apis.Gmail.v1.Data.Message>();

UsersResource.MessagesResource.ListRequest request = GoogleToken.GoogleService().Users.Messages.List("xxxxx@domain.edu");

request.Q = " from:xxxx@domain.edu AND is:unread AND subject:test ";

            do
            {
                try
                {
                    ListMessagesResponse response = request.Execute();
                    result.AddRange(response.Messages);
                    request.PageToken = response.NextPageToken;
                }
                catch (Exception eX)
                {
                    Debug.WriteLine("Error: " + eX.Message);
                }
            }
            while (!String.IsNullOrEmpty(request.PageToken));

            Debug.WriteLine("Done");
            Debug.WriteLine(result);
        }

2 个答案:

答案 0 :(得分:5)

即使您是域中的管理员,也无法以自己身份进行身份验证并获得对其他邮箱的访问权限。但是,作为域管理员,您可以将应用列入白名单以访问域中的所有用户。它涉及使用具有域范围委派的服务帐户。您需要在Google Apps Cpanel中将您的应用列入白名单,并使用稍微不同的身份验证流程。看到: https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority

虽然真的发生了电子邮件错误,但只需让他们回复后续纠正错误信息。从“他们的邮箱”中删除邮件,即使可能,从“用户信任”的角度看也是一个非常糟糕的主意(如果你有错误并删除了错误的邮件会发生什么!) - 有人试过推理说关于这个想法的人? :-D已经看过电子邮件的用户可能会在它刚刚消失时担心/困惑等等。

答案 1 :(得分:1)

为了访问其他用户帐户,每个用户都必须对您的应用程序进行身份验证和授权才能访问特定范围。

完成后,您将获得一个授权令牌,您可以使用该令牌来获取刷新令牌。

然后,您可以使用这些刷新令牌并访问帐户,除非用户撤消访问权限

但是,您无法避免每个用户的一次性活动接受提供对您的应用程序的访问权。