Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 刷新访问令牌时未授权\u客户端/无效\u客户端_Python 3.x_Web_Google Api_Access Token_Refresh Token - Fatal编程技术网

Python 3.x 刷新访问令牌时未授权\u客户端/无效\u客户端

Python 3.x 刷新访问令牌时未授权\u客户端/无效\u客户端,python-3.x,web,google-api,access-token,refresh-token,Python 3.x,Web,Google Api,Access Token,Refresh Token,正如标题所说,我无法刷新访问令牌,因为它给了我一个未经授权的\u客户端错误。这个在一个月前很好用,但现在不行了 以下是我获取令牌的方式: 我的android应用程序使用同意屏幕以所需的范围登录,并将令牌发送到我的服务器 然后,我的django服务器保存它们,以便以后可以刷新访问令牌 creds = google.oauth2.credentials.Credentials(credentials.access_token,refresh_token=credentials.refresh_to

正如标题所说,我无法刷新访问令牌,因为它给了我一个
未经授权的\u客户端
错误。这个在一个月前很好用,但现在不行了

以下是我获取令牌的方式:

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

  • 然后,我的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)
    
  • 此行从数据库中加载值,并将其加载到
    凭证
    对象中

    注:

  • 我必须
    clientid的
    ,一个用于android,一个用于web客户端
  • 我使用web客户端可用的
    clientid
    刷新令牌
  • 问题:

  • 如果我使用android的
    clientid
    ,它会抛出一个
    invalid\u client
  • 如果我使用web客户端的
    clientid
    ,它会显示
    unauthorized\u client
  • 我尝试过的事情:

  • 创建了另一个
    clientid
  • 检查是否有空格和其他打字错误
  • 更改同意屏幕的设置
  • 将产品添加到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)
    


    编辑:发现我的配额已用完。使用不同的帐户解决了这个问题。

    您提到您正在将访问令牌从客户端发送到服务器,以便稍后刷新它。所以你有两个代币

  • 刷新令牌
  • 身份验证令牌
  • 你能检查一下这些东西吗-

  • 会话过期后,客户端是否再次调用以刷新令牌。在这种情况下,需要在服务器端更新刷新令牌。每次用户登录时,都需要更新刷新令牌
  • 您正在服务器中正确更新刷新令牌
  • 如果使用来自服务器的刷新令牌重新验证客户端,则将获得新的刷新令牌和身份验证令牌。所以您正在服务器中更新这个新的刷新令牌
  • 如果你想从谷歌方面核实情况。
    您可以在客户端登录后立即从客户端获取刷新令牌,并将其发送到google进行刷新,然后查看您是否获得该令牌或未经授权。

    您提到,您正在将访问令牌从客户端发送到服务器,以便稍后刷新它。所以你有两个代币

  • 刷新令牌
  • 身份验证令牌
  • 你能检查一下这些东西吗-

  • 会话过期后,客户端是否再次调用以刷新令牌。在这种情况下,需要在服务器端更新刷新令牌。每次用户登录时,都需要更新刷新令牌
  • 您正在服务器中正确更新刷新令牌
  • 如果使用来自服务器的刷新令牌重新验证客户端,则将获得新的刷新令牌和身份验证令牌。所以您正在服务器中更新这个新的刷新令牌
  • 如果你想从谷歌方面核实情况。
    您可以在客户端登录后立即从客户端获取刷新令牌,并将其发送到谷歌进行刷新,然后查看您是否获得令牌或未经授权。

    谢谢您的回复。在检查了这些之后,我似乎可以使用oauth提供的访问令牌访问api请求。但是一个小时后它就过期了,当我试图刷新它时,它抛出了上面提到的错误。由于移动应用程序没有客户端id,因此我将客户端id用于web客户端。正如我之前所说,它在一个月前使用相同的客户id工作。谢谢您的回复。在检查了这些之后,我似乎可以使用oauth提供的访问令牌访问api请求。但是一个小时后它就过期了,当我试图刷新它时,它抛出了上面提到的错误。由于移动应用程序没有客户端id,因此我将客户端id用于web客户端。正如我之前所说,一个月前它使用相同的客户id。