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 オブジェクトで使用できない証明書が生成されました。
役立つポインタはありますか?