我正在使用Django Simple JWT实现用户身份验证,我做了很少的调整,因此访问令牌和刷新令牌作为仅限http的cookie发送,一切都运行良好

在前端,我已经实现了持久登录,将保持用户登录时,他们刷新页面或关闭浏览器等.

但由于我已经启用了这些设置:

"ROTATE_REFRESH_TOKENS": True,
"BLACKLIST_AFTER_ROTATION": True,

如果用户在很短的时间内多次刷新页面,则可能会发生令牌在用户收到新的刷新令牌之前被列入黑名单的情况

有什么办法可以解决这个问题吗? 我还不确定其可靠性的一种可能的解决方法是禁用自动黑名单,并等待前端在接收到新的刷新令牌时发送请求,请求的主体中包含旧的刷新令牌,如下所示

@api_view(['POST'])
def blacklist_token(request):
    refreshToken = request.data.get("refresh")
    print(refreshToken)
    if refreshToken:
        token = tokens.RefreshToken(refreshToken)
        token.blacklist()
    return Response(status=status.HTTP_200_OK)

PS:在前端使用React.js

推荐答案

刷新页面不需要刷新令牌.相反,后端应该接收并使用现有的访问令牌(来自仅限HTTP的cookie).

当访问令牌到期时,后台应向前端返回401未经授权的响应.然后,前端可以执行synchronized token refresh分.

这可以可靠地处理并发获取数据的多个视图.如果一次只有一个视图获取数据,则可以安全地启动令牌刷新服务器端.

最终,刷新令牌也将到期.在OAuth 2.0中,授权服务器在这种情况下返回invalid_grant错误代码.然后,前端重定向用户以再次进行身份验证.

我建议预演这些过期事件,因为这是确保应用程序可靠的好方法,这样用户就不会遇到不必要的错误.

Python相关问答推荐

使文本输入中的文本与标签中的文本相同

Image Font生成带有条形码Code 128的条形码时出现枕头错误OSErsor:无法打开资源

从DataFrame.apply创建DataFrame

pandas DataFrame GroupBy.diff函数的意外输出

需要计算60,000个坐标之间的距离

如何避免Chained when/then分配中的Mypy不兼容类型警告?

Python中的嵌套Ruby哈希

使用miniconda创建环境的问题

切片包括面具的第一个实例在内的眼镜的最佳方法是什么?

Godot:需要碰撞的对象的AdditionerBody2D或Area2D以及queue_free?

如何使用scipy的curve_fit与约束,其中拟合的曲线总是在观测值之下?

考虑到同一天和前2天的前2个数值,如何估算电力时间序列数据中的缺失值?

无论输入分辨率如何,稳定扩散管道始终输出512 * 512张图像

未调用自定义JSON编码器

Discord.py -

在电影中向西北方向对齐""

使用嵌套对象字段的Qdrant过滤

利用SCIPY沿第一轴对数组进行内插

如何在Python中从html页面中提取html链接?

仅取消堆叠最后三列