0

这个问题看起来很容易回答,但文档对此并不十分清楚。我正在使用 OAuth 2.0 来授权请求​​,但最后,只有管理员能够使用 API,普通用户会收到错误。我是否在我的配置中遗漏了某些内容,或者只是普通用户不允许使用 Directory API?据我所知,这应该是不可能的,但我看到了很多原因,而不是它应该是。例如,在我的应用程序中,我想根据用户的 OU 处理权限。不幸的是,我找不到这样做的方法,因为对 API 的每次调用都必须由经过身份验证的用户授权。但是,如果该用户不是管理员怎么办?

例如,如果我尝试以普通用户身份执行此API 示例,则会收到以下错误:

“无权访问此资源/api”。

而使用管理员帐户,我可以成功检索 JSON 结果。

4

2 回答 2

0

有意义的是,只有域的管理员才能使用 Directory API(它是 Admin SDK 的子集)——只有域管理员才能访问所有用户数据。

您可以使用服务帐户访问相关域的目录 API - 这将为您提供在允许您的应用程序时域管理员在范围内授予的完全访问权限。之后,您将在服务器端决定要向“普通”用户公开哪些功能,以及只向管理员公开哪些功能。

但同样,为了做到这一点,您需要找到一种在您的应用程序中实现服务帐户机制的方法。

于 2014-06-30T08:36:44.643 回答
0

我在评论另一个答案,因为我认为在这里使用委托是过分的并且具有安全隐患。
只需使用常规服务器流程 oauth2,无需 2 步 oauth。
在您的应用程序中创建一个页面,供域管理员输入并
在其中设置应用程序权限,创建一个 oauth 流来捕获该管理员用户的刷新令牌。
然后按照 oauth 文档从该刷新令牌中获取访问令牌
有 google 类可以为您完成所有这些

要快速尝试或跳过 oauth 流程实现并仅对刷新令牌进行硬编码,请转到https:// developers.google.com/oauthplayground/
那里,添加所需的范围,例如https://www.googleapis.com/auth/admin.directory.user
一直到第 2 步,它会为您提供一个刷新令牌。
当然,第 1 步和第 2 步需要通过有权访问所需权限的管理员帐户完成。继续第 3 步,通过调用所需的 api 来证明这确实有效。

于 2014-06-30T15:39:22.270 回答