2

から新しいアクセストークンを返しません:GoogleWebAuthorizationBrokerは自動的に私はこのように、アクセストークンとファイルストレージにおけるリフレッシュトークンを保存するGoogleWebAuthorizationBrokerクラスフォーム.NETクライアントライブラリを使用したリフレッシュトークン

  UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
       new ClientSecrets { ClientId = clientId, ClientSecret = clientSecret }, 
           scopes, "XXXXXX", CancellationToken.None 
      ,new FileDataStore("XXXXXX") 
           ).Result; 

動作するかどうか、1時間後に、accesトークンが無効で、AuthorizeAsyncを再び起動すると、 "credential"オブジェクトに返されたアクセストークンは更新されません(デバッグモードの値とアクセストークンをチェッキしました)まだ同じで、更新されていない)。ブラウザでさえ、許可を与えることをユーザーに求めるために起動しません(私はGoogleコンタクトAPIのために使用します)。

gataライブラリでの認証よりもはるかに単純であるため、認証用の.Net Googleクライアントライブラリを使用してOAuth2を使用しています。 それでも、古いgdata libを使用してGmailの連絡先を更新します(新しい連絡先APIはYET連絡先データの変更を許可しません)。

これらのAPIを混在させることに問題はありますか? gdataライブラリで私はautentificateすべきですか?

Thanx。

答えて

1

これは間違いなく、gdata APIを認証する最も簡単な方法は、認証ライブラリに発見ライブラリを使用することです。

あなたはgdataリクエストにアクセストークンをどのように適用しているのかわかりませんが、うまくいきます。

"GoogleWebAuthorizationBroker"が含まれているディスカバリライブラリがFileDatastoreを使用してアクセストークンを更新しています。それが必要なときにそれを行います。アクセストークンをリフレッシュするようなことはありません。これを行う最も簡単な方法は、ディスカバリーAPIを使用してダミー要求を行うことです。私は通常、人々のAPIを使用します。

People.get 'me'というパラメータを送信すると、現在認証されているユーザーのダミー情報が取得されます。アクセストークンが期限切れになっている場合は、新しいトークンを取得します。

私はライブラリを少し掘り下げるつもりですが、なぜこのような時に強制リフレッシュアクセストークンメソッドがないのでしょうか?

更新:

スコープPlusService.Scope.PlusMehttps://www.googleapis.com/auth/plus.loginを追加する必要があります。

var service = new PlusService(new BaseClientService.Initializer() 
      { 
       HttpClientInitializer = credential, 
       ApplicationName = "Google Plus Authentication Sample", 
      }); 

// dummy call to api to refresh the auth token if needed. 
var refresh = service.People.Get("me").Execute(); 

アップデート2:私は

var m = credential.GetAccessTokenForRequestAsync(); 

残念ながら、アクセストークンの更新を強制するための方法があることがわかったクライアントライブラリの中を掘りのビットの後

は、その行きます私はそれが動作することを確認することができる前に1時間になる。バックグラウンドコードは、現在のアクセストークンが期限切れになっているかどうかをチェックしてから、リフレッシュする前に期限切れになるのを待つ必要があります。

+0

Thanx DaImto。あなたのブログhttp://www.daimto.com/google-contacts-with-c/でコードを使用してgdataリクエストを使用しました。実際には、このブログで、コメントセクションでデバッグモードでうなずき、1時間後にAuthorizeAsyncによって返されたアクセストークンが更新されたことを参照してください。私は同じコードを使用しましたが、そうではありません。どうして ? People.get回避策については、いくつかのサンプルC#コードを指摘できますか? –

+0

あなたは人のAPIで遊んでみてください。 https://developers.google.com/people/api/rest/v1/people.connections Googleの連絡先から読むようです。 – DaImTo

+0

「サービス」オブジェクトを作成するにはどうすればよいですか? –

関連する問題