1

C# .NET GData SDK を使用してプロファイル API から編集用の Google プロファイルを取得しようとしていますが、認証に失敗しているようです。私は他の多くのGoogle APIを使用しており、それらで問題なく認証でき、同じコードアプローチを使用しています:

var settings = new RequestSettings("appname", ApiUsername, ApiPassword);
var contactsRequest = new ContactsRequest(settings);
var uri = new Uri(string.Format("https://www.google.com/m8/feeds/profiles/domain/{0}/full/{1}", googleDomain, googleUsername));
var contact = contactsRequest.Retrieve<Contact>(uri);

次の例外が発生します。

Google.GData.Client.GDataRequestException: リクエストの実行に失敗しました: https://www.google.com/m8/feeds/profiles/domain/xxx/full/joe.bloggs ---> System.Net.WebException: リモートサーバーがエラーを返しました: (401) 権限がありません。

Google Enterprise サポートのアドバイスに従って、コードと同じ資格情報を使用して OAuth2 Playground サイトを使用しましたが、うまくいきました。

私の推測では、ユーザー名とパスワードを取り込む際の SDK は RequestSettings オブジェクトでこれらの資格情報を使用せず、認証は失敗していますが、この同じアプローチがプロビジョニング API で機能しているにもかかわらずです。

私が恐れているのは、OAuth2 を使用する必要があることです。これは、私たちがやろうとしていることに対して不必要に複雑に思えます。これをサポートする Google ドキュメントはありません。

Profiles API で認証する方法のコード例はありますか?

編集:

はい、OAuth2 を使用する必要があるようですが、ユーザー名とパスワードを使用して認証することはできないため、Google SDK が壊れています。私は多くの例をハッキングしており、OAuth2 サポートを提供する別の Google SDK を使用しています。

API コンソールを介してインストール済みアプリケーションのクライアント ID を作成し、この ID API アクセスをスコープに割り当て、次のコードを使用しています。

var oAuth2Parameters = new OAuth2Parameters
{
    ClientId = "xxx",
    ClientSecret = "xxx",
    RedirectUri = "urn:ietf:wg:oauth:2.0:oob",
    Scope = "https://www.google.com/m8/feeds/"
};

// get an access token
OAuthUtil.GetAccessToken(oAuth2Parameters);

var settings = new RequestSettings("xxx", oAuth2Parameters);
var contactsRequest = new ContactsRequest(settings);

これによりさらに先に進むことができますが、次の例外が発生します。

System.ArgumentNullException: 値を null にすることはできません。パラメータ名: refresh_token

このコードは、バックエンド サービスの一部として実行されています。インストールされたアプリケーションのクライアント ID タイプが認証交換のタイプに対して間違っているかどうかはわかりません。私が最初に考えたのは、サービス アカウントのクライアント ID タイプを使用することでしたが、これにより、OAuth2Parameters オブジェクトで使用できない証明書が生成されました。

役立つポインタはありますか?

4

2 に答える 2

0

これを google-apps-script (クラウドベースの JavaScript) から google-apps に再タグ付けしています。

あなたの質問について - はい、oAuth 2 を使用する必要がありますが、oAuth 2 自体にはいくつかのオプションがあります。それを理解するのに数時間を費やすと、多くのベンダーで非常に標準的かつ一般的になりつつあるため、実際に成果が得られます.

Google では、ここから始められるようにいくつかのスターター ライブラリ (.NET を含む) を提供しています - https://developers.google.com/accounts/docs/OAuth2#libraries

いくつか試してみて、問題が発生した場合は共有してください。

于 2012-12-05T12:17:32.463 に答える
0

多くの実験の後、OAuth2 を使用せずに必要なプロファイル API から結果が返ってきました。 .

シンプルなユーザー名とパスワードの認証方法を使用し、ContactsRequest.Retrieve(uri) を使用する代わりに次を使用しました。

var settings = new RequestSettings("xxx", ApiUsername, ApiPassword);
var cr = new ContactsRequest(settings);
var uri = new Uri(string.Format("https://www.google.com/m8/feeds/profiles/domain/{0}/full/{1}", googleDomain, googleUsername));
var query = new ContactsQuery(uri.AbsoluteUri);
var feed = cr.Get<Contact>(query);
于 2012-12-05T16:00:18.057 に答える