我很难调和基于浏览器的javascript应用程序的想法,该应用程序需要使用(按书本方式) REST服务作为后端来实现身份验证。
所有其他身份验证方案基本上都是不安全的,因为它需要将密码存储在js应用程序中,在js应用程序中它很容易被其他scripts/extensions.
)
因此,如果我真的关心安全性,那么最安全的方案不是基于cookie/会话的方法吗?这不排除使用REST服务后端吗?
在我看来,休息服务仍然很受欢迎,所以我是不是想得太多了?
编辑:,我在找一个清晰的答案
principles.
发布于 2021-06-01 09:56:40
这可能是自以为是的,但无国籍状态被高估了。大多数服务实际上不需要是无状态的,您很可能不会开发下一个有1000万并发用户的大热门。从纯粹的安全角度来看,无国籍会带来诸如令牌失效之类的问题。(退出)几乎是不可能的。
还有,有状态的休息也不是闻所未闻的。出于上述原因,在许多情况下,有一个有状态的后端来维护用户会话,同时也遵循大多数REST原则是非常有意义的。许多时候,类似于API网关的组件提供状态,而它背后的所有服务都可能是无状态的。实际上,这可能是许多应用程序所能得到的最安全的体系结构,因为后端服务可以扩展,但它也为会话失效等特性提供了前端状态。
你也可以混合这些,这是一个经常使用的东西。您可以在它自己的来源上有一个身份提供程序,比如login.example.com,您可以在这里发出令牌,并且这个身份提供程序可以是有状态的(即。使用cookie进行刷新令牌或会话id存储)。然后,您可以在api.example.com上使用无状态服务,这些服务将无状态地使用这些令牌。您是对的,令牌随后容易受到XSS的影响,但是如果您愿意的话,这通常是一种折衷的、聪明的风险--例如,可以通过非常有限的令牌生存期来减轻这种风险(这很有帮助,因为XSS很多时候都需要用户交互,所以即使攻击者能够获得一个令牌,下一次仍然不自动)。
因此,简而言之,这取决于您想要承担的风险,以及您需要满足的业务需求。即使你是有状态的,你也不需要一般地放弃休息。
(而且,在GET请求中对令牌使用请求头与REST或HTTP标准完全不同)。
https://stackoverflow.com/questions/67786000
复制相似问题