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

无法使用刷新令牌获取访问令牌

归建安
2023-03-14

目前访问类型处于联机状态。当我需要访问驱动器上的文件/文件夹时,我将浏览器重定向到Google URL并获得访问代码:

String code = "code that was returned from brouser"
GoogleTokenResponse response = flow.newTokenRequest(code).setRedirectUri(REDIRECT_URI).execute();
GoogleCredential credential = new GoogleCredential().setFromTokenResponse(response);

一切运转良好!但我只需要第一次重定向。

当我谷歌时,在google Drive API文档中,我发现我可以通过浏览器重定向获得刷新令牌,并将其保存在数据库中。(换句话说,我可以使用脱机访问)。

而且每次当我需要从google drive读取数据时,我使用刷新令牌获得访问令牌,而无需重定向。不是吗?

所以我得到这样的刷新令牌:

https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=695230079990.apps.googleusercontent.com&scope=https://www.googleapis.com/auth/drive&response_type=code&redirect_uri=https://localhost

问题1
我从浏览器重定向中获得代码。是刷新令牌,不是吗?现在,我需要使用该刷新令牌获取访问令牌。

 $.ajax({
      type: "POST",
      url: 'https://accounts.google.com/o/oauth2/token',
      data: {
        client_id: "695230079990.apps.googleusercontent.com",
        client_secret: 'OWasYmp7YQ...4GJaPjP902R',
        refresh_toke: '4/hBr......................xwJCgQI',
        grant_type: 'refresh_token'
      },
      success: functhtml" target="_blank">ion(response) { 
        alert(response);
      }

    });

但我有400个错误;

redirect_uri的参数值无效:不允许使用非公共域:https://sampl.ecom

那么,我必须创建web应用程序客户端ID,而不是从google API控制台安装应用程序吗?我不能在已安装的应用程序中更改重定向URI吗?我很困惑,我不知道,我应该用哪个。

共有1个答案

淳于枫
2023-03-14

1)当您尝试进行脱机访问时,您将获得授权代码,该代码可能被赎回为访问令牌和刷新令牌。

对于Isnetty:

https://accounts.google.com/o/oauth2/auth?access_type=offline
&approval_prompt=auto
&client_id=[your id]
&redirect_uri=[url]
&response_type=code
&scope=[access scopes]
&state=/profile

在您获得授权代码后,您将获得刷新令牌。

 static Credential exchangeCode(String authorizationCode)
      throws CodeExchangeException {
    try {
      GoogleAuthorizationCodeFlow flow = getFlow();
      GoogleTokenResponse response =
          flow.newTokenRequest(authorizationCode).setRedirectUri(REDIRECT_URI).execute();
      return flow.createAndStoreCredential(response, null);
    } catch (IOException e) {
      System.err.println("An error occurred: " + e);
      throw new CodeExchangeException(null);
    }
  }

有关更多信息,请参见实现服务器端授权令牌一节。

并且在获得刷新令牌之后,必须保存它。有关上午信息,请参见示例。

2)如果您没有安装应用程序,您应该创建web应用程序来更改重定向URL。

 类似资料:
  • 我的问题是如何使用OAuth2.0从刷新令牌中获取访问令牌。我还没有找到任何从刷新令牌中获取访问令牌的例子。 我参考了[Google+API参考],但他们使用HTTP方法提到了它。2请用C#提供一些使用Google+API提供的方法的例子。

  • https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=your_app_client_id&response_type=code&redirect_uri=https%3a%2f%2flogin.microsoftonline.com%2fcommon%2foauth2%2fnativeclient&res

  • 我想根据保存在数据库中的“刷新令牌”获得一个新的“访问令牌”。 请求{“error”:“invalid_grant”} 我在php脚本中使用相同的CLIENT_ID、CLIENT_SECRET和“refresh token”,在“访问令牌”过期时,我设法使用“refresh token”获得新的“访问令牌”。 我基于javadoc.google-oauth-java-client编写了代码。 UP

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

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