当前位置: 首页 > 知识库问答 >
问题:

GMail API超级管理员通过API访问其他用户帐户?

常鸿朗
2023-03-14

我所在的学校从2009年初开始运行谷歌教育应用程序。我负责创建、删除、修改等。学生电子邮件账户。我已经将我所有现有的C#应用程序从GData转换到新的管理SDK——生活很好。

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

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

因为我可以在收件箱上这样做,所以我想我应该再进行一次测试,插入其中一个800个电子邮件地址,得到同样的结果。不幸的是,我收到了这条错误消息:

错误:谷歌。API。请求。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个答案

狄晟睿
2023-03-14

为了访问其他用户的帐户,每个用户都必须验证和授权您的应用程序以访问特定范围。

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

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

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

文寒
2023-03-14

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

虽然确实会发生电子邮件错误,但只要让他们回复一封后续邮件,纠正错误信息即可。从“用户信任”的角度来看,从他们的邮箱中删除电子邮件,即使是可能的,也是一个非常糟糕的主意(如果你有错误并删除了错误的邮件,会发生什么!)--有人试过与上述人员就这个想法进行推理吗?:-D已经看到该电子邮件的用户可能会担心/困惑它何时消失,等等。

 类似资料:
  • 通过点击此请求:https://outlook.office365.com/api/v1.0/users/room@email.com/events 浏览器中,我可以输入我的管理员用户名和密码并获取该特定房间的日历事件。但是,当我尝试从经过管理员身份验证的本机应用程序进行此调用时,我收到此响应:reason=“调用应访问 oauth 令牌中指定的邮箱。error_category=“invalid

  • 这个问题是针对gmail商业/教育账户的。为了从gmail帐户读取电子邮件,我用c编写了一个dll,它执行IMAP命令,然后解析它们的响应。使用当前的IMAP实现,我需要使用每个用户的用户名和密码信息登录到每个用户的邮箱。所以我想知道gmail业务中是否有任何选项可以让我使用单个管理员用户凭据登录到域中的多个用户,而无需从域中的每个单独用户那里获取密码?

  • 超级管理员是整个系统的管理员。我们可以在RBAC,ABAC以及带域的RBAC等模型中使用它 具体例子如下: [request_definition] r = sub, obj, act [policy_definition] p = sub, obj, act [policy_effect] e = some(where (p.eft == allow)) [matchers] m = r.

  • 在 seahub_settings.py 配置文件中可以个性化用户管理 # 是否开启用户注册功能,默认为 `False`,不开启. ENABLE_SIGNUP = False # 用户注册后是否立即激活,默认为 `True`,立即激活。 # 如果设置为 `False`,需管理员在系统管理界面激活用户。 ACTIVATE_AFTER_REGISTRATION = False # 管理员添加新用户后,

  • 我们现在正在使公司内部应用程序适应 Office 365。这两个系统都是MVC项目。我们正在尝试直接使用 O365 REST API。需要以下方面的帮助: > < li> 如何使用域管理员凭据从我们公司O365帐户中的另一个人处获得预约?我们还可以考虑将此人的日历添加到“我的日历”或“其他日历”下的管理帐户日历列表中。 如何使用超级管理员帐户在另一个人日历中设置约会。 基本上,我们想要的是能够在其

  • 我正在构建一个使用Microsoft Graph的本机应用程序。 我正在使用OAuth2授权工作流获取授权代码:https://login.microsoftonline.com/common/OAuth2/authorize?resource=https://graph.microsoft.com&prompt=admin_contority