Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.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 authlib在使用客户端凭据时是否支持刷新我的访问令牌?_Python 3.x_Oauth 2.0_Authlib - Fatal编程技术网

Python 3.x authlib在使用客户端凭据时是否支持刷新我的访问令牌?

Python 3.x authlib在使用客户端凭据时是否支持刷新我的访问令牌?,python-3.x,oauth-2.0,authlib,Python 3.x,Oauth 2.0,Authlib,我是authlib新手,在查看文档时,它提到它支持passwordgrant\u类型的“自动刷新” 我想知道库是否能够在使用client\u凭据时检测当前关联的令牌何时过期,然后为我请求一个新的访问令牌。(为我跳整个OAuth舞) 检查我需要做的每一个电话,检查我是否得到了401,然后触发获取新代币的动作,这看起来很难看 这里有没有最佳实践可以遵循?是否可以以某种方式将其添加为装饰器?它将自动刷新您的令牌,下面是代码: 为了给前面的答案增添一些味道,我能够让refresh\u token函数为最

我是authlib新手,在查看文档时,它提到它支持
password
grant\u类型的“自动刷新”

我想知道库是否能够在使用
client\u凭据时检测当前关联的令牌何时过期,然后为我请求一个新的访问令牌。(为我跳整个OAuth舞)

检查我需要做的每一个电话,检查我是否得到了401,然后触发获取新代币的动作,这看起来很难看


这里有没有最佳实践可以遵循?是否可以以某种方式将其添加为装饰器?

它将自动刷新您的令牌,下面是代码:


为了给前面的答案增添一些味道,我能够让refresh\u token函数为最近的API集成工作

这有一些特殊之处,我必须在refresh\u令牌调用中传递client\u id和client\u secret。我还必须设置grant_类型。这些可能不适用于您尝试使用的API

from authlib.integrations.requests_client import OAuth2Session

my_token = {'refresh_token':current_refresh_token,
            'access_token': current_access_token,
            'expires_at': current_access_token_expires_at,
            'expires_in': current_access_token_expires_in}

oauth_session = OAuth2Session(CLIENT_ID,CLIENT_SECRET,
                              authorization_endpoint=AUTH_ENDPOINT,
                              token_endpoint=TOKEN_ENDPOINT,
                              token=my_token,
                              grant_type='refresh_token')

    new_token = oauth_session.refresh_token(
                    url=REFRESH_TOKEN_URL,
                    client_id=CLIENT_ID,
                    client_secret=CLIENT_SECRET)