刷新OAuth2Session而不使用刷新标记

2024-03-28 09:21:01 发布

您现在位置:Python中文网/ 问答频道 /正文

一个提供者提供了一个新的基于OAuth2的API,我正在Django应用程序中集成它。我被卡在令牌\u过期的错误,这将引发几分钟后。你知道吗

documentation中有使用refresh\u令牌更新过期令牌的示例。你知道吗

出于安全原因,API提供程序不提供刷新令牌。 他们说他们不想使用刷新令牌,而是希望每个会话都通过标准OAuth流。你知道吗

在没有更新令牌的情况下,我找不到很多可供选择的案例。你知道吗

有谁能给我一点缺失的知识吗?你知道吗

这是我的API类:

class API:

    client_id = "CLIENT_ID"
    client_secret = "CLIENT_SECRET"

    auth = HTTPBasicAuth(client_id, client_secret)
    client = BackendApplicationClient(client_id=client_id)

    refresh_url = 'https://theprovider.com/token'
    oauth = OAuth2Session(client=client)


    token = oauth.fetch_token(token_url='https://theprovider.com/token', auth=auth, timeout=10)

    print(token)

    payload = {}
    headers = {
        'Accept': 'application/vnd.group.v3+json'
        }
    endpoint = 'https://api.theprovider.com/group/'

    tried_refresh = False
    while True:
        try:
            r = oauth.request('GET', endpoint, headers=headers, data=payload, allow_redirects=False, timeout=10)
            return r
        except TokenExpiredError:
            if tried_refresh:
                raise
            token = oauth.fetch_token(token_url='https://theprovider.com/token', auth=auth, timeout=10)
            print(token)           
            tried_refresh = True      

印刷品显示:

{
"access_token":" utTJFMrOKwlyB5rcBpCIP6Dtn0k4w8vtqR6TJtu-fvEIm9tXTZf6q4JSaRaxRc7eSgO4EAggELN5bqADCSGq4mDEQgM-k-VPUi7IVIkKrVAFdwyb9Yz1cXy9 BspU96tZSmxjNiNzMiLCJvcmciOiJTTFI6MTMyMjAzNiIsImF6cCI6IjMwODE4NWVhLTkyZTAtNGE0NS1iNzg2LWU5MzI1OTIyM2I3MyIsImNsaWVudG5hbWUiOiJDaGFubmFWFmYyRdvKZyB4PibGUiLCJpc3MiOiJsb2dpbi5ib2wuY29tIiwic2NvcGVzIjoiQ3VzdG9tU2NvcGU0IEN1c3RvbVNjb3BlMyIsImV4cCI6MTUzOTI0NDkwMSwiaWF0IjoxNTM5MjQ0NjAxLCJhaWQiOiJTTFI6MTMyMjAzNiIsImp0aSI6IjI1YzcxZDY2LTU0YzgtNDQ3ZS04NTk0LWEwMzFlZDNkNGUzOSJ9.Nkc90mTB-BLVJEnSDHx2o1bkJ-eyJraWQiOiJyc2ExIiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiIzMDgxODVlYS05MmUwLTRhNDUtYjc4Ni1lOTMyNTkyM7Dan9VaFQF1o8EvlGCV42n61KAjeEg8PrjVwqFvJ8y9QUzcpTFXQ5f4VFgIfZfYaqZyM2iJWFlpSpVl-jQAiGjOp0xSForKtGe2-FdyXmmQNpw_IltcPmvJIGABU3Xngx5O- _F13sG_zRoy7g1CBspU9dx5DLDuOa17PBmj52kQVEV8Q",
"token_type": "Bearer",
"expires_in": 299,
"scope": "{scopes}"
}

更新: 我在头中找到了this article,上面写着:当访问令牌过期时,应用程序将强制用户再次登录。 我的问题是,这个过程如何与OAuth2Session一起工作。你知道吗

更新: 我解决了。参见编辑的代码。你知道吗


Tags: httpscomclienttokenauthapiid应用程序