python - 使用带有 Flask 的 Authlib 获取和存储刷新 token

标签 python flask oauth-2.0 authlib requests-oauthlib

我正在使用 authlib https://github.com/lepture/authlib获得用户对其数据的认证,因此日常离线调度程序可以代表用户下载一些数据。

我先注册客户端:

google = oauth.register(
    'google',
    client_id = '***',
    client_secret = '***',
    access_token_url = "https://www.googleapis.com/oauth2/v4/token", 
    access_token_params = None,
    authorize_url = "https://accounts.google.com/o/oauth2/v2/auth",
    authorize_params = None,
    api_base_url = 'https://googleapis.com/oauth2/v1/',
    client_kwargs={'scope': 'https://www.googleapis.com/auth/doubleclickbidmanager'}
)

在稍后阶段,我使用以下方法检索 token :

token = oauth.google.authorize_access_token()

当我打印 token 时,我看到 Google 没有返回我需要存储在数据库中以供离线使用的刷新 token :

{'access_token': '***', 'expires_in': 3599, 'scope': 'https://www.googleapis.com/auth/doubleclickbidmanager', 'token_type': 'Bearer', 'expires_at': 1591750317}

我能否更改使用 access_type = offline 注册客户端的方式,以便让 Google 知道我也需要刷新 token ?如何获取和存储刷新 token ?

最佳答案

这是将access_type 添加到授权端点的解决方案:

google = oauth.register(
    'google',
    # ...
    authorize_params={'access_type': 'offline'},
)

使用此 authorize_params 将额外参数传递给 authorize_url。

关于python - 使用带有 Flask 的 Authlib 获取和存储刷新 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62293888/

相关文章:

python - Odoo:如何将动态域设置为many2many字段

javascript - Django - 使用 JavaScript 进行实时更新

python - Flask 应用程序未连接到端口

javascript - 使用 hello.js 自定义 OAuth2 提供程序

python - 如何使用 Python 重命名 Google Drive 文件

python - 带有 after_request 的基本 Flask 应用程序返回服务器错误

python - 类型错误 : Object of type function is not JSON serializable when using flask_jwt_extended int RESTful API

python - 如何使用 Flask 显示 html 然后重定向到下载

python - 使用 python-social-auth 和 django-rest-framework 进行 JWT 身份验证

android - 使用 Volley POST 请求获取 Twitter 授权 token