刷新一个OAuth2Session而无需使用refresh_token

时间:2019-04-25 11:52:28

标签: python django api oauth-2.0 python-requests

提供程序提供了一个新的基于OAuth2的API,我正在将其集成到Django应用程序中。我陷于token_expired错误,该错误将在e分钟后引发。

documentation中,有一些示例使用refresh_token更新过期的令牌。

出于安全原因,API提供程序不提供refresh_token。 他们说,他们不想使用刷新令牌,但希望每个会话都经过标准的OAuth流程。

经过大量搜索后,如果没有refresh_token,我找不到替代情况来进行更新。

有人可以给我一些缺少知识的提示吗?

这是我的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一起工作。

更新: 我解决了查看修改后的代码。

0 个答案:

没有答案