谷歌应用管理设置API - 401



我正试图获得谷歌应用程序域的组织名称。为此,我使用谷歌应用程序管理设置API。我看到它需要三条腿的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 . api取代…

解决!

谢谢杰。它在OAuth 2.0 playground上工作。我这边的设置有问题

使用Fiddler,我看到授权头被我的应用程序设置。它被设置为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;

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

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

你也可以看看Dito GAM,一个开源的Google Apps工具如何实现这个调用。如果创建一个名为debug。gam将打印出它正在发出/接收的所有原始HTTP调用和响应

相关内容

  • 没有找到相关文章

最新更新