提供程序提供了一个新的基于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一起工作。
更新: 我解决了查看修改后的代码。