Google API流程每次都需要获得刷新令牌的同意

问题描述 投票:0回答:1

使用python 3.6,requests == 2.22.0

尝试使用Google API,尤其是mobile and desktop apps flow

我能够使用此URL生成验证码:

url = (
    'https://accounts.google.com/o/oauth2/v2/auth?'
    'scope={scope}'
    'response_type=code&'
    'redirect_uri={redirect_uri}&'
    'client_id={client_id}&'
    'access_type=offline'.format(
        redirect_uri=redirect_uri,
        client_id=client_id,
        scope=scope,
    )
)

我现在使用的redirect_uri只是https://google.com,它已注册到我生成的开发人员应用中,位于Authorized redirect URIs页面下and部分的Authorized domains部分/标签。

一旦将生成的URL粘贴到浏览器中,我将获得一个可提取并用于进行下一个调用的代码:

OAuth consent settings

输出:

data = {
    'client_id': client_id,
    'client_secret': client_secret,
    'grant_type': 'authorization_code',
    'code': code,
    'redirect_uri': redirect_uri,
}
url = 'https://oauth2.googleapis.com/token'

response = requests.post(
    url,
    data=data,
    headers={
        'Content-Type': 'application/x-www-form-urlencoded',
    },

print(response)
print(response.json())

这里是问题:最初,我从无处不在的各种示例中尝试了基本范围:<Response [200]> {tokens dictionary} <-- more downstream ,得到的结果是:

email+profile

接下来,我添加了我感兴趣的实际范围(并确保将其添加到开发人员应用程序中:]

{'access_token': '******', 'expires_in': 3594, 'scope': 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile openid', 'token_type': 'Bearer', 'id_token': '******'} <-- id_token is a JWT

我得到的结果是这个:

https://www.googleapis.com/auth/calendar.events+https://www.googleapis.com/auth/calendar.readonly

没有刷新令牌? (我特别要求它刷新访问令牌)

然后我阅读{'access_token': '******', 'expires_in': 3595, 'scope': 'https://www.googleapis.com/auth/calendar.events https://www.googleapis.com/auth/calendar.readonly', 'token_type': 'Bearer'} 并将this stack overflow post添加到上面的代码授予URL:("&prompt=consent"

现在我得到:

https://accounts.google.com/o/oauth2/v2/auth

我现在有刷新令牌,但这是唯一的方法吗?如果用户最终要再次通过该流程,它将强制执行另一个同意页面流程-在已经获得初始同意之后,不需要该页面。

每次没有明确同意,是否有任何方法可以获取刷新令牌?

python python-3.x google-api google-calendar-api google-oauth
1个回答
0
投票

每次没有明确同意,是否有任何方法可以获取刷新令牌?

没有在用户同意离线访问的情况下,第一次返回刷新令牌。Google假设您已经保存了它,并且在那里不需要另一个。撤消用户访问权限并再次请求访问权限,您应该获得刷新令牌。或发送请求提示将要求用户再次授予您离线访问权限,并且您将再次获得新的刷新令牌。

© www.soinside.com 2019 - 2024. All rights reserved.