当前位置: 首页 > 知识库问答 >
问题:

使用Google API从刷新令牌获取访问令牌

宇文迪
2023-03-14

我的问题是如何使用OAuth2.0从刷新令牌中获取访问令牌。我还没有找到任何从刷新令牌中获取访问令牌的例子。

我参考了[Google+API参考],但他们使用HTTP方法提到了它。2请用C#提供一些使用Google+API提供的方法的例子。

共有1个答案

公西博实
2023-03-14

第一次,您需要从浏览器提示符中获取访问令牌,然后将其保存在某个存储区中。

检查令牌是否过期,然后尝试刷新它。

此处代码:

private static IAuthorizationState GetAuthentication(NativeApplicationClient arg)
    {
        try
        {

            // Get the auth URL:
            var config = new Configuration();
            var calendarScope = Google.Apis.Util.Utilities.ConvertToString(CalendarService.Scopes.Calendar);
            IAuthorizationState state = new AuthorizationState(new[] { calendarScope });
            state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl);
            Uri authUri = arg.RequestUserAuthorization(state);
            var authCode = String.Empty;

            if (String.IsNullOrWhiteSpace(config.AccessToken) || config.AccessTokenExpirationTime < DateTime.Now || String.IsNullOrWhiteSpace(config.RefreshToken))
            {

                // Request authorization from the user (by opening a browser window):
                Process.Start(authUri.ToString());
                do
                {
                  authCode = Prompt.ShowDialog("Test", "123");
                } while (String.IsNullOrWhiteSpace(authCode));
                state = arg.ProcessUserAuthorization(authCode, state);
            }
            else
            {
                state.AccessToken = config.AccessToken;
                state.AccessTokenExpirationUtc = config.AccessTokenExpirationTime;
                state.AccessTokenIssueDateUtc = config.AccessTokenIssueTime;
                state.RefreshToken =config.RefreshToken ;
                if (state.AccessTokenExpirationUtc < DateTime.Now)
                {
                    var tokenRefreshed = arg.RefreshToken(state);
                    if (tokenRefreshed)
                    {
                        config.AccessToken = state.AccessToken;
                        config.AccessTokenExpirationTime = state.AccessTokenExpirationUtc;
                        config.AccessTokenIssueTime = state.AccessTokenIssueDateUtc;
                        config.RefreshToken = state.RefreshToken;
                        arg.ProcessUserAuthorization(authCode, state);
                    }
                    else
                    {
                        throw new ApplicationException("Unable to refresh the token.");
                    }
                }
            }
            return state;
        }
        catch (System.Exception exp)
        {
            throw new ApplicationException("Failed to get authorisation from Google Calender.", exp);
        }
    }
 类似资料:
  • 目前访问类型处于联机状态。当我需要访问驱动器上的文件/文件夹时,我将浏览器重定向到Google URL并获得访问代码: 一切运转良好!但我只需要第一次重定向。 当我谷歌时,在google Drive API文档中,我发现我可以通过浏览器重定向获得刷新令牌,并将其保存在数据库中。(换句话说,我可以使用脱机访问)。 而且每次当我需要从google drive读取数据时,我使用刷新令牌获得访问令牌,而无

  • 调用execute方法时,它会引发以下异常: 谁能指出我哪里做错了?我能够从谷歌oAuth UI获得访问令牌。

  • 我不熟悉,它代表。我混淆了它的两个术语:访问令牌和刷新令牌。 用户注册/登录站点后,我创建和。 将刷新标记保存在数据库或cookie中。 15分钟后,用户标记访问令牌过期。 如果用户空闲2小时,我将从cookie或DB中删除刷新令牌,否则我将使用刷新令牌续订访问令牌。 有什么优化的方法可以达到这个目的吗?

  • 我已经阅读了JWT和访问令牌和刷新令牌。我知道您必须在很短的时间(分钟)内设置访问令牌过期,并在过期时使用刷新令牌获取新的访问令牌。 我不清楚三件事: 谁检查访问令牌是否过期?客户端是否通过发送过期的访问令牌和刷新来检查并请求新的访问代码? 谁检查刷新令牌是否过期?(显然刷新令牌也需要过期,尽管需要更长的时间才能过期)。 在我看来,如果刷新令牌过期,则必须提示用户重新登录。在某些情况下(移动应用)

  • 我如何从第一次授权代码中获得刷新令牌和访问令牌?并且,我如何重用这个刷新令牌来获得一个新的访问令牌,以便使用Java API上传到Google Drive?这不是一个web应用程序。它在Java Swing代码中。