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

Java web应用程序会话与令牌的安全性,java,spring,spring-mvc,jakarta-ee,spring-security,Java,Spring,Spring Mvc,Jakarta Ee,Spring Security,背景: 我正在开发一个web应用程序,计划使用SpringMVC和SpringSecurity。我的计划是使用基于表单的身份验证,其中spring security对凭据进行身份验证,并设置会话JSESSIONID,以便根据请求头中存在的cookie对后续请求进行身份验证 我的理解: Web应用程序请求应具有状态。此状态可以通过使用会话来完成 纯粹基于会话的身份验证容易受到CSRF攻击。由于spring security提供了CSRF保护,我使用session+CSRF保护时没有发现任何安全循

背景:
我正在开发一个web应用程序,计划使用
SpringMVC
和SpringSecurity。我的计划是使用基于表单的身份验证,其中spring security对凭据进行身份验证,并设置会话
JSESSIONID
,以便根据请求头中存在的cookie对后续请求进行身份验证

我的理解

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

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

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

我的问题:
但当我在这个网站上看到很多问题时,人们正在使用基于令牌(OAuth2/JWT)的web应用程序身份验证。但我认为令牌只用于访问API

但当我看到人们在web应用程序中使用令牌时,我就有了这个问题。假设基于令牌的web应用程序不使用会话,但在每个请求的头中都需要令牌

  • 我们什么时候应该在web应用程序中进行基于令牌的身份验证

  • 就安全性而言,哪一个是好的<代码>会话+CSRF或
    令牌
    基于身份验证

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

    编辑:

    来自momo的评论 大多数情况下,这取决于您的客户
    例如,对于移动客户端(例如
    JSON
    通过
    HTTP
    的有效负载),没有
    会话这样的东西
    JWT
    具有跨原点工作的优势。相比之下,基于会话的
    身份验证方法和
    Cookies仅适用于相同的(子域)并且扩展性不太好
    但是,
    会话
    JWT
    更容易失效。既然您使用的是
    springmvc
    ,而且我想可伸缩性并不重要,那么就选择您更喜欢的那种吧。

    结论:会话只支持来自同一来源的请求,首选基于令牌的身份验证来验证跨来源请求


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

    JWT

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

    • 主要与web浏览器结合使用
    • 更容易使会话无效(删除)。JWT只有一个到期日,并且在到期前有效
    • 请注意以下cookie属性:安全;HttpOnly和提供一些针对跨站点请求伪造攻击的保护:SameSite=Strict或SameSite=Lax
    其他方法: 开源身份提供者,如keydape,例如traefik作为负载平衡器,已经变得相当流行。这带来了一个好处,即新路由可以在不重新启动任何服务的情况下上线。此外,在某些情况下,它还可以避免由于API调用过多而导致的应用程序停机

    总结如下: 许多路通向罗马。这始终取决于团队的具体要求、环境和技能。既然您使用的是SpringMVC,而且我想可伸缩性并不重要,那么就选择您更喜欢的

    • 对于无状态应用程序,请使用JWT
    • 对于第三方应用程序,请使用OAuth2
    • 对于状态完整的应用程序,请使用会话+CSRF

    通常,这取决于您的客户。例如,对于移动客户端(例如HTTP上的JSON有效负载),没有会话这样的东西。JWT具有跨原点工作的优势。相比之下,基于会话的带有cookie的身份验证方法只适用于相同的(子域)并且扩展性不太好。但是,使会话无效比使JWT无效更容易。既然您使用的是SpringMVC,而且我想可伸缩性并不重要,那就选择您更满意的那个吧。@momo非常感谢您。我的疑虑澄清了。小评论中的宽泛描述。请考虑我在未来访问者的观点写下答案。