我正在尝试获取 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;