0

我正在尝试获取 Google Apps 域的组织名称。为此,我正在使用 Google Apps Admin Settings API。我看到它需要 3-Legged OAuth。我尝试实施 OAuth 2.0,因为不推荐使用 OAuth 1。我尝试了很多方法来完成这项工作,但我总是得到未经授权的 401。

我请求范围的令牌:https ://apps-apis.google.com/a/feeds/domain/

这是我的代码:

// ClientID & ClientSecret values
var requestFactory = GDAPI.GoogleApps.GetAuthRequestFactory();

string organizationName = String.Empty;

 Google.GData.Apps.AdminSettings.AdminSettingsService service = 
            new Google.GData.Apps.AdminSettings.AdminSettingsService(auth.Domain, Excendia.Mobility.Utilities1.BLL.WebConfig.ExcendiaAppName);
 service.RequestFactory = requestFactory;
 service.SetAuthenticationToken(token);

 try
 {
     var result = service.GetOrganizationName(); // throw exception here...
 }
 catch (Exception ex)
 {
     log.Error(ex);
 }

我究竟做错了什么?这与 OAuth 2 兼容吗?

我还想问是否有另一种方法来获取组织名称,因为 GData 库应该已经过时并被新的 Google.Apis 取代......

解决!

谢谢杰。它适用于 OAuth 2.0 操场。我这边的东西设置不正确。

使用 Fiddler,我看到我的应用程序设置了 Authorization 标头。它被设置为 OAuth v1 而不是 v2。所以我发现我使用了错误的 RequestFactory 类。需要使用 GOAuth2RequestFactory 而不是 GOAuthRequestFactory ...

所以这现在正在工作:

string organizationName = String.Empty;

Google.GData.Apps.AdminSettings.AdminSettingsService service = 
            new Google.GData.Apps.AdminSettings.AdminSettingsService(auth.Domain, "myAppName");

service.RequestFactory = 
            new Google.GData.Client.GOAuth2RequestFactory("cl", "MyAppName",
            new Google.GData.Client.OAuth2Parameters()
            { ClientId = ClientID, 
              ClientSecret = ClientSecret, 
              AccessToken = token });

try
{

    var result = service.GetOrganizationName();

    if (result != null)
    {
        organizationName = result.OrganizationName;
    }
}
catch (Exception ex)
{
    log.Error(ex);
}

return organizationName;
4

1 回答 1

0

您正在使用正确的 API。尽管 GData 正在被新的 Google API 取代,但 Admin Settings API 目前仍使用旧的 GData 格式。

您是否使用超级管理员帐户进行身份验证?您可以在OAuth 2.0 操场上尝试该操作,看看它是否适用于那里的帐户?

您还可以看看Dito GAM,一个开源的 Google Apps 工具是如何实现这个调用的。如果您在与 GAM 相同的路径中创建名为 debug.gam 的文件,GAM 将打印出所有原始 HTTP 调用和它正在制作/获取的响应。

于 2013-05-07T15:34:01.143 回答