【问题标题】:Session authentication for both browser and non-browser clients浏览器和非浏览器客户端的会话身份验证
【发布时间】:2019-06-28 15:50:42
【问题描述】:

我想知道以下基于令牌的身份验证设计是否合理。

  1. 客户发布登录凭据
  2. 验证后,服务器生成(session_key, expires_at) <- (a 256-bit pseudo-random string, some date in the future) 并将其保存在选择的存储系统中。
  3. 服务器在响应的 HTTP-Only cookie 中设置 session_key。
  4. 服务器设置响应负载{session_key: ..., expires_at: ...}。原因是非浏览器客户端没有 cookie,它们会读取此有效负载,并将其存储在本地以备将来使用。

具体来说,我认为系统需要在有效负载中发送令牌以及非浏览器客户端的 cookie。这是一种常见的做法吗?还是我错过了一些重要的东西,还有更好的选择?

【问题讨论】:

    标签: http authentication cookies session-cookies


    【解决方案1】:

    正如我在another question 中指出的那样,这很好。它不会公开会话密钥,就像它仅在 cookie 中一样。仅当攻击者可以使用有效的用户/密码组合调用您的身份验证端点时,才会发生这种情况。

    确保您的身份验证端点不接受有效会话并回显其密钥,因为这可能会使您面临 CSRF 和会话窃取!

    有关其他身份验证方法,请查看我整理的Web Authentication Guide

    【讨论】:

    • 感谢您的回答。您能否详细说明为什么系统不应“接受有效会话并回显其密钥”?
    • 会话 ID 受 HTTPOnly cookie 保护。页面上的任何脚本都不可能从浏览器中提取它。但是,如果您的登录端点(上面称为身份验证端点)接受有效会话并回显会话 ID,则它可能会泄露给脚本。另一种情况是,如果您有 CORS,那么攻击者可以向登录端点发出跨域请求并获取会话 ID。
    猜你喜欢
    • 1970-01-01
    • 2016-04-10
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多