0

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;
4

1 に答える 1

0

正しい API を使用しています。GData は新しい Google API に置き換えられていますが、Admin Settings API は現在も古い GData 形式を使用しています。

認証にスーパー管理者アカウントを使用していますか? OAuth 2.0 プレイグラウンドで操作を試して、そこのアカウントで機能するかどうかを確認できますか?

また、オープン ソースの Google Apps ツールであるDito GAMがこの呼び出しをどのように実装しているかを確認することもできます。GAM と同じパスに debug.gam という名前のファイルを作成すると、GAM は生の HTTP 呼び出しと、作成/取得するすべての応答を出力します。

于 2013-05-07T15:34:01.143 に答える