如何在Google Admin Directory API上使用2腿oauth

时间:2013-06-15 12:09:41

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

我正在尝试编写代码,以使用带有2条腿OAuth的Google管理目录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请求是否需要userid(xoauth_requestor_id参数)?我知道在使用2LO时,其他API需要此参数,但如果Directory和Provisioning API需要此参数则不清楚。

BTW:我想从头开始构建2LO HTTP请求,而不使用任何lib,但我还没有开始。我需要确保2LO适用于Directory API请求。

1 个答案:

答案 0 :(得分:1)

如果其他人偶然发现这一点,Google会在原始帖子发布前一个月弃用Provisioning API。在尝试使用管理员API授权对我的Google Apps域进行API访问时,我最近遇到了同样的问题。在最终搞清楚之后,我决定将其记录下来,我实际上正在编写关于如何make some sense out of Google Apps Directory API and OAuth 2.0的系列文章...请记住,Google现在强烈鼓励使用OAuth 2.0,所以2LO已成为过去,上述“修复”可能不再具有相关性。

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