我正在考虑允许用户撤销以前颁发的 token (是的,即使它们被设置为在 15 分钟后过期),但没有找到任何使用 DRF-jwt 这样做的方法。

现在,我正在考虑几种选择:

  • 希望 SO 上的某个人会告诉我如何开箱即用 ;-)
  • 使用 jti 字段作为计数器,并在撤销时要求 jti > last jti。
  • 在签名过程中添加用户级别的盐,并在撤销时更改它
  • 在某些 Redis DB 中存储实时 token

  • 以上任何一条路都可以走吗?

    最佳答案

    我们在我们的项目中是这样做的:

    jwt_issue_dt 添加到用户模型。

    original_iat 添加到有效负载。所以 token 刷新不会修改这个字段。

    比较来自有效载荷和 original_iatuser.jwt_issue_dt :

    from calendar import timegm
    from rest_framework_jwt.authentication import JSONWebTokenAuthentication
    
    class CustomJSONWebTokenAuthentication(JSONWebTokenAuthentication):
    
        def authenticate_credentials(self, payload):
            user = super(CustomJSONWebTokenAuthentication, self).authenticate_credentials(payload)
            iat_timestamp = timegm(user.jwt_issue_dt.utctimetuple())
            if iat_timestamp != payload['iat']:
                raise exceptions.AuthenticationFailed('Invalid payload')
            return user
    

    要撤销 token ,您只需要更新字段 user.jwt_issue_dt

    关于django - 使用 Django rest-framework-jwt 撤销 token ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42108046/

    10-11 06:56