我需要的是,每次用户请求新的访问令牌时,旧的访问令牌都会变得无效、无法使用并被删除。
当您要求一个新令牌时给出一个新令牌似乎是一种预期的行为。难道你不能在要求新的之前 撤销现有的吗?
更新
如果您决定只保留一个令牌 -
OAuth2Validator类继承 OAuthLib
RequestValidator
并覆盖方法
save_bearer_token。在此方法中,在与
AccessToken 模型实例创建及其 .save() 方法相关的代码之前,您可以查询(类似于
this)以查看数据库中是否已经为此用户保存了一个 AccessToken。如果找到现有的令牌可以从数据库中删除。
我强烈建议将此更改配置为可配置,以防您将来改变主意(在所有多个令牌出于此类原因发行之后)
一个更简单的解决方案是拥有自己的验证器类,可能是继承oauth2_provider.oauth2_validators.OAuth2Validator
和覆盖save_bearer_token
的。这个新课程应该OAUTH2_VALIDATOR_CLASS
在settings.py
此外,有没有办法让密码咕噜声类型不会创建刷新令牌。我在我的应用程序中没有任何用处。
Django OAuth Toolkit 依赖于 OAuthLib。
将 refresh_token 设为可选归结为这一行的 oAuthLib 类中的create_token
方法,而密码授予类在此处。如您所见,此类的方法采用默认设置为的参数。该值用于该行的同一类的方法中BearerToken
__init__
refresh_token
True
create_token_response
token = token_handler.create_token(request, self.refresh_token)
create_token_response
OAuthLibCore
我相信,Django OAuth 工具包类中的方法是调用create_token_response
OAuthLib 中相应的方法。观察这个类的方法的用法self.server
和它的初始化__init__
,它只是将验证器作为参数传递,但与refresh_token
.
将此与OAuthLib Imlicit grant type的create_token_response
方法进行比较,该方法明确执行
token = token_handler.create_token(request, refresh_token=False)
refresh_token
根本不创造
所以,除非我在这里遗漏了一些东西,tldr ,否则我认为 Django OAuth 工具包不会暴露 optional 的特性refresh_token
。