1

我正在尝试使用带有 2 Legged OAuth 的 Google Admin Directory API 编写代码来获取我们的 Google Apps 域中的所有用户帐户。不幸的是,我几乎找不到任何目录 API 的文档或示例代码。我尝试了下面的代码:

AdminService adminService = new AdminService();
Google.Apis.Authentication.OAuth2LeggedAuthenticator  authenticator= new  Google.Apis.Authentication.OAuth2LeggedAuthenticator(mydomainName, domainConsumerSecret, adminId, mydomainName);
UsersResource usrRes = new UsersResource(adminService, authenticator);
UsersResource.ListRequest listReq =   usrRes.List();
Google.Apis.Admin.directory_v1.Data.Users  allUsers =  listReq .Fetch();
foreach (Google.Apis.Admin.directory_v1.Data.User usr in allUsers.UsersValue)
{ ...  }

但我得到了 401 未经授权的错误。然后我尝试了使用旧 GData Lib 的低级方式。

Google.GData.Client.OAuth2LeggedAuthenticator authenticator = new OAuth2LeggedAuthenticator("MyAPP", mydomainName, domainConsumerSecret,adminId, mydomainName, "HMAC-SHA1");
HttpWebRequest request = authenticator.CreateHttpWebRequest("GET", new Uri("https://www.googleapis.com/admin/directory/v1/users?domain=mydomain.com"));
HttpWebResponse response = request.GetResponse() as HttpWebResponse;

上面的代码得到了同样的 401 错误。

根据 Directory API 的源代码,我认为支持 2LO。但是,我就是无法让它发挥作用。任何人都可以帮助指出我的问题吗?谢谢。

另一个问题:2LO 目录 API 请求需要用户 ID(xoauth_requestor_id 参数)吗?我知道使用 2LO 时其他 API 需要此参数,但不清楚 Directory and Provisioning API 是否需要此参数。

顺便说一句:我想在不使用任何库的情况下从头开始构建 2LO HTTP 请求,但我还没有开始。我需要确保 2LO 可以处理 Directory API 请求。

4

1 回答 1

1

如果其他人偶然发现这一点,谷歌在原始帖子前一个月左右弃用了 Provisioning API。我最近在尝试使用 Admin Directory API 授权 API 访问我的 Google Apps 域时遇到了同样的问题。在最终弄清楚之后,我决定记录下来,实际上我正在整理一系列关于如何从 Google Apps Directory API 和 OAuth 2.0 中获得意义的系列......请记住,Google 现在强烈鼓励使用 OAuth 2.0,因此 2LO 已成为过去,上面的“修复”可能不再相关。

如果人们不想单击该链接,我建议使用 Google 的 API Explorer 来了解如何使用特定 API 制定成功的 POST/GET 请求。这为我节省了大量时间。另外,请注意,如果您尝试使用 directory.users.list API 并在域中拥有数千个帐户,则检索用户将需要很长时间。我建议从 directory.users.get API 开始检索特定用户并检查成功的 API 请求/响应是什么样的。

于 2013-09-22T01:00:36.453 回答