【问题标题】:Is converting cookie auth session to token safe?将 cookie 身份验证会话转换为令牌安全吗?
【发布时间】:2020-01-08 14:45:44
【问题描述】:

我想创建一个 http 服务处理程序,它将现有的身份验证会话 cookie 转换为令牌(即 JSON Web 令牌)。我应该关注 XSS 或任何其他漏洞,还是只是被现代浏览器默认禁用 CORS 所覆盖?

【问题讨论】:

    标签: jwt xss csrf


    【解决方案1】:

    如果没有关于用例的更多信息,这很难说:它取决于 JSON Web 令牌中将包含哪些信息,它将被发送到哪些客户端(例如,在不同的域中和/或由不同的实体控制) ,这些客户端将如何使用它(例如是否通过 https),以及客户端的用途(例如,它是作为用户还是在一组受限的权限下)

    还请注意,标准 OAuth 2.0 已经允许这种情况:您可以利用现有的 Web 会话(即在 code 流中)对授权服务器进行身份验证并将令牌发送到 OAuth 2.0 客户端;正确实施 OAuth 2.0 规范将保证不会出现上述漏洞

    【讨论】:

    • 谢谢汉斯。这是您对 OAuth 提出的一个很好的观点。这听起来确实像一个类似的工作流程。一个区别是,通常 OAuth 提供者第一次询问用户是否要允许请求者 example.com 具有 OAuth 访问权限,并且用户必须同意。就我而言,我的软件不会询问用户,但另一方面,我的服务器有一个受限制的访问控制允许来源列表。我打算将它用于我网站的不同子域以及移动应用程序,始终在 https 和我的软件中。我想使用范围来降低风险。
    • 我认为的另一个区别是 OAuth 使用 url 中的令牌将调用者重定向到请求 url(通过询问用户或通过预注册或两者来授权),而我会就像我的 http 请求处理程序直接在 http 响应正文中返回令牌。
    • a) OAuth 2.0 还允许不需要明确同意并且通过白名单安排“预授权”的场景; b) OAuth 2.0 也有一个 POST 绑定,请参阅openid.net/specs/oauth-v2-form-post-response-mode-1_0.html
    • 谢谢汉斯。我觉得没关系,假设正确的访问控制允许来源,除非我错过了什么。
    • 好吧,OAuth 2.0 流程是通过(完整的)浏览器而不是在 Ajax 调用中处理的,因此 CORS 不适用于颁发/获取访问令牌和因此是从 cookie 到令牌的“转换”;如果您想在 Ajax 调用中使用它可能适用于与您收到它的域不同的域中的 API,但这超出了 OAuth 2.0
    【解决方案2】:

    如果我理解正确,您的服务处理程序仅将会话 cookie 值作为输入,然后将其输出为 JSON?

    在这种情况下,只要您使用标准的、久经考验的 JSON 编码器,您就可以安全地抵御XSSCSRF 应该不是问题,因为您的方法是 safe method,而 Same Origin Policy 将阻止您的 cookie 被另一个域读取,因为您没有选择使用 CORS。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-12
      • 2016-12-18
      • 1970-01-01
      • 2010-10-05
      • 2019-12-25
      • 1970-01-01
      • 2020-09-29
      相关资源
      最近更新 更多