Google Apps ドメインの組織名を取得しようとしています。このために、Google Apps Admin Settings API を使用しています。3-Legged OAuth が必要であることがわかりました。OAuth 1 が廃止されたため、OAuth 2.0 を実装しようとしています。私はこの作業を行うために多くのことを試みますが、常に 401 unautorized を取得しています。
スコープのトークンをリクエストします: 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 ヘッダーが設定されていることがわかりました。v2 ではなく OAuth v1 に設定されました。そのため、間違った RequestFactory クラスを使用していたことがわかりました。GOAuthRequestFactory の代わりに GOAuth2RequestFactory を使用する必要があります...
したがって、これは現在機能しています:
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;