2

認証コードを取得してアクセス トークンと交換するコードが動作する C# アプリがインストールされています。リフレッシュトークンを保存しています。ある時点で、それを使用して新しいアクセス トークンを取得する必要があることを知っています。次のメソッドを定期的に呼び出して、ドライブ アカウントと共有されているファイルを監視しているとします。

   /// <summary>
   /// Retrieve a list of File resources.
   /// </summary>
   /// <param name="service">Drive API service instance.</param>
   /// <returns>List of File resources.</returns>
   public static List<File> retrieveAllFiles(DriveService service) {
      List<File> result = new List<File>();
      FilesResource.ListRequest request = service.Files.List();
      request.Q = "sharedWithMe and trashed=false";
      do {
         try {
            FileList files = request.Fetch();

            result.AddRange(files.Items);
            request.PageToken = files.NextPageToken;
         } catch (Exception e) {
            Console.WriteLine("An error occurred: " + e.Message);
            request.PageToken = null;
         }
      } while (!String.IsNullOrEmpty(request.PageToken));
      return result;
   }
}

ある時点で、service.Files.List() の呼び出しが失敗すると想定しています。アクセス トークンの期限切れが原因で失敗したことを確認するにはどうすればよいですか?また、更新トークンを使用するコードは何ですか? 更新トークンを使用するためにここから収集したいくつかのコード (以下) が既にあります。アクセス トークンの有効期限が切れると、このメソッドが呼び出されますか?

    private static IAuthorizationState GetAuthorization(NativeApplicationClient arg)
   {
      // If we already have a RefreshToken, use that
      if (!string.IsNullOrEmpty(RefreshToken))
      {
         state.RefreshToken = RefreshToken;
         if (arg.RefreshToken(state)) {
            mTextBox.Text = "RF: " + RefreshToken;
            return state;
         }
      }
      // authCode is a TextBox on the form
      var result = arg.ProcessUserAuthorization(mTextBox.Text, state);
      RefreshToken = state.RefreshToken;
      return result;
   }
4

4 に答える 4

2

AccessToken の更新にまだ問題がある場合は、これが解決策を見つけるのに役立つ可能性があります。

            Google.GData.Client.RequestSettings settings = new RequestSettings("<AppName>");
            Google.GData.Client.OAuth2Parameters parameters = new OAuth2Parameters()
            {
                ClientId = "<YourClientId>",
                ClientSecret = "<YourClientSecret>",
                AccessToken = "<OldAccessToken>", //really necessary?

                RedirectUri = "urn:ietf:wg:oauth:2.0:oob",
                RefreshToken = "<YourRefreshToken>",
                AccessType = "offline",
                TokenType = "refresh",
                Scope = "https://www.google.com/m8/feeds/" //Change to needed scopes, I used this for ContactAPI
            };
            try
            {
                Google.GData.Client.OAuthUtil.RefreshAccessToken(parameters);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
于 2015-11-19T20:42:39.360 に答える
0

更新トークンを使用してアクセス トークンを使用および更新する方法を理解するために、過去 2 日間を費やしました。私の答えは、ここの別のスレッドに投稿されています。

Google API V 3.0 .Net ライブラリと Google OAuth2 の更新トークンの処理方法

于 2015-08-06T19:25:37.670 に答える