Web应用程序会话与令牌的安全性

问题描述 投票:1回答:1

背景:我正在开发一个计划使用spring-mvc和spring安全性的Web应用程序。我的计划是使用基于表单的身份验证,其中spring安全性对凭据进行身份验证并设置会话JSESSIONID,以便随后的请求将基于请求标头中存在的cookie进行身份验证。

我的理解

  • Web应用程序请求应具有状态。可以通过使用会话来实现此状态。

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

  • access-tokens仅用于授予对第三方应用程序公开的API的访问。

我的问题:但是,当我在该站点中看到很多问题时,人们正在使用基于令牌(OAuth2 / JWT)的Web应用程序身份验证。但是我相信令牌只是用来授予对API的访问权限。

但是,当我看到人们在Web应用程序中使用令牌时,我才遇到这个问题。假设基于令牌的Web应用程序不使用会话,但是希望每个请求的标头中都包含令牌。

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

  2. 就安全性而言,哪个好? [基于Session + CSRFtoken的身份验证

我对令牌和会话的用例感到困惑。

java spring spring-mvc java-ee spring-security
1个回答
1
投票

[通常,这取决于您的客户。例如,对于移动客户端(例如,HTTP上的JSON有效负载),没有会话之类的东西。

JWT

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

会话

  • 主要与网络浏览器一起使用
  • 更容易使会话无效(删除)。 JWT只有到期日期,并且有效期至到期为止
  • 请注意以下Cookie属性:安全; HttpOnly并为跨站点请求伪造攻击提供一些保护:SameSite = Strict或SameSite = Lax

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

总结:通往罗马的道路很多。它始终取决于特定的要求,环境和团队的技能。因为无论如何,您都使用Spring MVC,并且我认为可伸缩性并不关键,所以选择一个您更舒适的选择即可。

© www.soinside.com 2019 - 2024. All rights reserved.