http - 浏览器和非浏览器客户端的会话身份验证
问题描述
我想知道以下基于令牌的身份验证设计是否合理。
- 客户发布登录凭据
- 验证后,服务器生成
(session_key, expires_at) <- (a 256-bit pseudo-random string, some date in the future)
并将其保存在选择的存储系统中。 - 服务器在响应中的 HTTP-Only cookie 中设置 session_key。
- 服务器设置响应负载
{session_key: ..., expires_at: ...}
。原因是非浏览器客户端没有 cookie,它们会读取此有效负载,并将其存储在本地以备将来使用。
具体来说,我认为系统需要在有效负载中发送令牌以及非浏览器客户端的 cookie。这是一种常见的做法吗?还是我错过了一些重要的东西,并且有更好的选择?
解决方案
正如我在另一个问题中指出的那样,这很好。它不会公开会话密钥,就像它仅在 cookie 中一样。仅当攻击者可以使用有效的用户/密码组合调用您的身份验证端点时,才会发生这种情况。
确保您的身份验证端点不接受有效会话并回显其密钥,因为这可能会使您暴露于 CSRF 和会话窃取!
有关其他身份验证方法,请查看我整理的Web 身份验证指南。
推荐阅读
- flutter - 为什么我不能在颤振推送器中发送地图?
- r - 汇总/分组表中的唯一行
- bash - 如何将每个命令的 stout 重定向到 bash 中的单独日志文件?
- gtsummary - 在 gtsummary 中显示和比较连续变量的正态分布与非正态分布的简单方法
- azure - Power shell 命令禁用 Azure 数据工厂的网络设置
- angular - 关闭模式或背景点击后如何防止页面滚动到顶部?
- python - 如何检测时间序列中的翻转?
- css - 我可以更改css中元素的父级吗?
- php - 不允许在购物车中添加特定的产品数量
- hash - 哈希表函数 hlist_add_before 在 Linxu 内核中的实现