刷新访问令牌时为unauthorize_client / invalid_client

时间:2020-07-18 20:43:07

标签: python-3.x web google-api access-token refresh-token

正如标题所述,我无法刷新访问令牌,因为它给了我一个unauthorized_client错误。过去一个月以前,它可以完美运行,但现在不起作用。

这是我获取令牌的方式:

  1. 我的android应用使用同意屏幕以所需的范围登录,并将令牌发送到我的服务器

  2. 然后,我的django服务器将它们保存起来,以便以后可以刷新访问令牌。

    creds = google.oauth2.credentials.Credentials(credentials.access_token,refresh_token=credentials.refresh_token,token_uri=token_uri,client_id=client_id_2,client_secret=client_secret,scopes=scopes)
    

此行从数据库中加载值并将其加载到Credentials对象中。

注意:

  1. 我必须clientid's,一个用于Android,一个用于Web客户端。
  2. 我使用可用于网络客户端的clientid刷新令牌

问题:

  1. 如果我使用android的clientid,则会引发错误invalid_client
  2. 如果我使用Web客户端的clientid,则说unauthorized_client

我尝试过的事情:

  1. 创建了另一个clientid
  2. 检查了空格和其他错字
  3. 更改同意屏幕的设置
  4. 将产品添加到inapp购买中,因为在此之前似乎无法与其他api一起使用。

示例代码:

creds = google.oauth2.credentials.Credentials(credentials.access_token,refresh_token=credentials.refresh_token,token_uri=token_uri,client_id=client_id_2,client_secret=client_secret,scopes=scopes)
req = google.auth.transport.requests.Request()
creds.refresh(req)

enter image description here

1 个答案:

答案 0 :(得分:0)

您提到要从客户端向服务器发送访问令牌,以便以后可以刷新它。所以你有两个令牌

  1. 刷新令牌
  2. 身份验证令牌

您可以只检查一次这些事情吗:-

  1. 在会话期满之后,客户端是否再进行一次呼叫以刷新令牌。在这种情况下,刷新令牌需要在服务器端进行更新。每次用户登录时,刷新令牌都需要更新
  2. 您正在正确更新服务器中的刷新令牌。
  3. 如果您正在使用来自服务器的刷新令牌来重新认证客户端,则将获得新的刷新令牌和auth令牌。因此,您正在服务器中更新此新的刷新令牌

如果您想从Google方面进行验证。 您可以在客户端登录后立即从客户端获取刷新令牌,然后将其发送给Google进行刷新,以查看您是获取令牌还是遭到未经授权。

相关问题