gpt4 book ai didi

java - Web 应用程序 session 与 token 的安全性

转载 作者:行者123 更新时间:2023-11-30 05:26:27 25 4
gpt4 key购买 nike

背景:
我正在开发一个Web应用程序,计划使用spring-mvc和spring security。我的计划是使用基于表单的身份验证,其中 spring security 验证凭据并设置 session JSESSIONID ,以便后续请求将根据请求 header 中存在的 cookie 进行身份验证。

我的理解:

  • Web 应用程序请求应该具有状态。这种状态可以通过使用 session 来完成。

  • 纯粹基于 session 的身份验证容易受到 CSRF 攻击。由于 Spring Security 提供了 CSRF 保护,因此使用 session + CSRF 保护我没有发现任何安全漏洞。

  • 访问 token 仅用于授予对已向第三方应用程序公开的 API 的访问权限。

我的问题:
但是当我在这个网站上看到很多问题时,人们正在使用基于 token (OAuth2/JWT)的 Web 应用程序身份验证。但我相信 token 仅用于提供对 API 的访问。

但是当我看到人们在网络应用程序中使用 token 时,我就得到了这个问题。假设基于 token 的 Web 应用程序不使用 session ,但期望每个请求的 header 中包含 token 。

  1. 何时我们应该在 Web 应用程序中进行基于 token 的身份验证

  2. 就安全性而言,哪一个好?基于 session + CSRF token 的身份验证

我对 token 和 session 的用例感到困惑。

编辑:

来自momo的评论

Most often, it depends on your clients.
For example, for mobile clients (e.g. JSON payload over HTTP), there is no such thing as a Session. JWT has the advantage to work cross-origin. In contrast, a Session-based auth method with Cookies works only for the same (Sub)-domain) and scales not that well.
However, it is easier to invalidate a Session than a JWT. Since you anyway use Spring-MVC and i guess scalability is not critical, just go with the one you are more comfortable.


conclusion: Session supports requests only from same origin, token based authentication preferred for authenticating cross origin requests.

最佳答案

大多数情况下,这取决于您的客户。例如,对于移动客户端(例如通过 HTTP 的 JSON 有效负载),不存在 session 这样的东西。

智威汤逊

  • JWT 具有跨域跨域工作的优势
  • 因此,基于 JWT 的身份验证规模更好
  • 在单页应用程序 (SPA)/Web API 时代非常流行
  • 请注意使用签名或 MAC 的完整性保护。不允许不安全的 JWT:{"alg":"none"}

session

  • 主要与网络浏览器结合使用
  • 更容易使 session 失效(删除)。 JWT只有有效期,过期前一直有效
  • 请注意以下 cookie 属性:安全; HttpOnly 并提供一些针对跨站点请求伪造攻击的保护:SameSite=Strict 或 SameSite=Lax

其他方法:开源身份提供商,例如 Keycloak,例如traefik 作为负载均衡器已经变得非常流行。这样做的好处是,新路由无需重新启动任何服务即可上线。此外,在某些情况下,它还可以节省由于 API 调用率过高而导致的应用程序停机时间。

总结:条条大路通罗马。这始终取决于具体的要求、环境和团队的技能。既然你无论如何都使用 Spring MVC 并且我想可扩展性并不重要,所以就选择你更舒服的那个..

关于java - Web 应用程序 session 与 token 的安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58490092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com