2012-01-17 15 views
1

私は、会社の(ビジネス)プライベートカレンダーにアクセスするWebページを作成しようとしています。それでも私は認証の問題に直面しています。私は、私はこのすべてを行なったし、解雇された要求は非常にオーケーで、APIキーとOauth2LeggedAuthenticatorを使用する必要があります(それはトークンと、このようなOAuthのを持っている)しかし、まだ応答が無効な資格情報を持つ例外でGoogle Calendar V3 2レガシー認証に失敗しました

API manual states;簡単に言えば、私の資格情報は間違っていますが、依然としてclientID、clientSecret、およびAPI Keyは有効です。私は2つの認証されたauthenticaterの最後の2つのパラメータを疑う、これは正しいですか?

var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description); 
provider.ClientIdentifier = ClientCredentials.ClientID; 
provider.ClientSecret = ClientCredentials.ClientSecret; 

var authenticator = 
new OAuth2LeggedAuthenticator(ClientCredentials.ClientID, ClientCredentials.ClientSecret, "myworkusername", "workdomain.com"); 


Google.Apis.Calendar.v3.CalendarService service = new Google.Apis.Calendar.v3.CalendarService(authenticator); 

service.Key = ClientCredentials.ApiKey; 


var result = service.CalendarList.List().Fetch(); 

Assert.IsTrue(result.Items.Count > 0); 
+0

カレンダー用の.NETのlibとauthはうんざりです。私は自分自身を理解していない...誰かが一見それを働かせることができたこの記事があります:http://stackoverflow.com/questions/8537681/google-api-v3-for-dotnet-using- api-key-with-api-key – Fugwenna

答えて

4

NB:/秘密のOAuth 1.0のキーを取得する方法はありませんとあなただけのビジネス/ EductionのためのGoogle Appsと2本足の認証を使用することができます書いている時点で、これは個人のアカウントでは動作しません少なくとも1回はオンライン認証を使用する必要があります(ただし、ブラウザ外オプションを使用すると、専用ページを作成する必要はありません)。

あなたのコードはあなたと離れていますが、NativeApplicationClientに関連する最初の3行は必要ありません。 OAuthキーが正しく設定されていないため、これが失敗する可能性が最も高くなります。これは401を引き起こします。

401を引き起こすもう1つの原因は、ユーザー名として「matt」ではなく「[email protected]」を使用していることです。ユーザー名にはドメインは含まれません。

OAuthを設定するには、Googleのthis articleの手順に従ってください。

「すべてのAPIへのアクセスを許可する」は、のチェックを外してにする必要があり、すべてのAPIへのアクセスを個別に許可する必要があります。これが行われていない場合は401 Invalid Credentialsエラーが発生します。 api consoleのサービスを有効にする必要があります。 APIコンソールステップが完了していない場合は、403 Daily Limit Exceededの別のエラーが発生します。

以前は「すべてのAPIへのアクセスを許可する」にさまざまなサービスを使用していた場合、v3 APIを使用するためにすべてを個別に許可する必要があります。これはhave been confirmed by google(Nicolas Garnierによる4番目の返信)と思われ、おそらくバグですが、それは古い投稿ですので、ここに滞在しているかのように見えます。

var auth = new OAuth2LeggedAuthenticator(domainName, consumerSecret, usernameWithoutDomain, domainName); //domainName is presently used as the OAuth ConsumerKey for Google's 2legged OAuth 

var service = new CalendarService(auth); 

service.Key = serviceKey; 

var results = service.CalendarList.List().Fetch(); 

Console.WriteLine(results.Items.Count); 

ので、要約で:これが実行された後の参照のために、このコードは本質的にあなたと同じである、動作します

のGoogle Appsには、「このドメインの管理」> 「高度なツール」

「OAuthドメインキーの管理」を使用して、秘密を生成し、「すべてのAPIへのアクセスを許可する」チェックボックスをオフにします。

「サードパーティのOAuthクライアントアクセスを管理する」を使用すると、ドメインを「クライアント名」として使用してアクセスするAPIと、アクセスするAPIなどを有効にできます。カレンダーの「http://www.google.com/calendar/feeds/」

最後にAPI consoleにプロジェクトを作成し、上記の例でserviceKeyとしてAPIKeyを使用し、アクセスするAPIをオンにします。

なぜ私のコードが常に401を返すのかを調べようとしていたとき、私はこの質問に答え続けました。これは、Googleの指示がひどく、現時点で散在しているので、誰かを助けることを願っています。

+0

この例では、「consumerSecret」はGoogle Apis Console(https://code.google.com/apis/console)に表示される「クライアントシークレット」と同じです? また、「serviceKey」はコンソールからのSimple API Access APIキーと同じですか? –

+0

@Rob Gibbensいいえ、3脚用にしか使用できません。 – mattmanser

+0

ブログ投稿へのリンクが死んでいます...そして、それは私に縫い目があります。OLO 2.0では2LOは不可能です。これがクライアントライブラリが使用するものです...このメソッドがまだ動作することを確認できますか? – billy

関連する問題