Authentication 基于令牌的身份验证是否需要在数据库中存储令牌?
我在身份验证中使用基于令牌的方法,但在许多博客中,我看到他们将令牌存储在数据库中 我们是否需要在DB中基于令牌的身份验证中存储令牌 在这个博客中,有人提到我们正在对令牌进行签名,而不是存储在数据库中,我认为这应该是实现真正无状态的方法。这取决于情况。 如果您有多台服务器,请在服务器重新启动之间保留令牌,而不是将其保留在某个位置。数据库通常是一个简单的选择。Authentication 基于令牌的身份验证是否需要在数据库中存储令牌?,authentication,token,Authentication,Token,我在身份验证中使用基于令牌的方法,但在许多博客中,我看到他们将令牌存储在数据库中 我们是否需要在DB中基于令牌的身份验证中存储令牌 在这个博客中,有人提到我们正在对令牌进行签名,而不是存储在数据库中,我认为这应该是实现真正无状态的方法。这取决于情况。 如果您有多台服务器,请在服务器重新启动之间保留令牌,而不是将其保留在某个位置。数据库通常是一个简单的选择。 如果您只有一台服务器,并且不关心用户在重新启动后必须再次登录,那么您可以将其保留在内存中。如果您使用链接/提及的网页中所述的令牌基础身份验
如果您只有一台服务器,并且不关心用户在重新启动后必须再次登录,那么您可以将其保留在内存中。如果您使用链接/提及的网页中所述的令牌基础身份验证,则无需将令牌存储在数据库中
您必须考虑的是,可以传输所有需要的信息,资源服务器需要完全填充,以安全的方式在令牌内传递所请求的资源。p> 例如,为了以安全的方式传输userId,您可以另外加密令牌。如果您希望确保某些数据不会出于安全原因离开数据中心,那么最好将这些数据保存在数据库中,并且令牌只包含对存储在数据库中的用户相关数据的引用(id)——这或多或少与中的描述相同
您还应该记住,将用户信息添加到令牌意味着每个请求都有额外的负载,并且可能需要更长的时间来加密/解密和签名/验证签名 如果您打算使用无状态/无数据库方法,您应该澄清:- 令牌的可能大小
- 用于签名/验证/加密/解密令牌的额外cpu负载
- 标题大小限制
- 分发用于在数据中心内对令牌进行签名/验证/加密/解密的密钥
- 延长令牌的生存期
- 兑换代币
- 其他保安规定— i、 e.如果攻击者能够读取/(解密加密的)令牌,是否存在问题
- 网络存储
警报(“您被黑客攻击”)将>编码到表单中,以查看该表单是否由浏览器运行,是否可供其他用户查看
作为一种存储机制,Web存储在传输过程中不强制执行任何安全标准。无论谁阅读并使用Web存储,都必须尽职尽责,确保始终通过HTTPS发送JWT,而不是HTTP
- 饼干
当cookie与HttpOnly
cookie标志一起使用时,不能通过JavaScript访问,并且不受XSS的影响。您还可以设置Secure
cookie标志,以确保cookie仅通过HTTPS发送。这是过去利用cookie存储令牌或会话数据的主要原因之一。现代开发人员对使用cookie犹豫不决,因为他们传统上要求状态存储在服务器上,从而打破了RESTful最佳实践。如果在cookie中存储JWT,则作为存储机制的cookie不需要在服务器上存储状态。这是因为JWT封装了服务器服务请求所需的一切
但是,Cookie容易受到不同类型的攻击:跨站点请求伪造(CSRF)。CSRF攻击是一种攻击类型,当恶意网站、电子邮件或博客导致用户的web浏览器在用户当前已通过身份验证的受信任网站上执行不必要的操作时,会发生这种攻击
通过包含xsrfToken
JWT声明,可以使此CSRF保护成为无状态
利用您的web应用程序框架的CSRF保护,使Cookie在存储JWT时坚如磐石。通过检查API中的HTTPReferer
和Origin
头,也可以部分防止CSRF。CSRF攻击将具有与您的应用程序无关的Referer
和Origin
头
有关更多详细信息,请参阅。我正在考虑web应用程序调用rest api的两种方法
first: store on db and each request call we make a check token.
second: store on cookies and it check in services memory
你是说头认证?还有类似这样的身份验证:基本xSdaqsdfawEFdqweD
?但basic只是base64,不需要保存。你可以每次都计算它们。我在读,他们提到Java Web令牌,而不是将令牌存储在数据库中。这取决于,你希望身份验证保持不变吗?那不是真的。其思想是,在授权期间,(授权)服务器创建一个签名(并加密)令牌,客户端在每个请求中发送该令牌。任何具有正确密钥的(资源)服务器都可以(解密)和验证令牌,而无需本地持久性。这里有趣的问题是:如何分发如何在不知道令牌存在的情况下(由于缺乏持久性)构建重新登录列表,以及如何分发/交换/旋转加密/签名密钥。如果您有多台服务器,则需要