我正在构建一个基于令牌的身份验证(Node.js使用带有angular客户端的passport/JWT)。
用户输入凭证后,他将获得一个访问令牌,并在头中的每个请求中发送该令牌(头:bearer token)。
我不想每次他的访问令牌过期时都提示登录请求(我猜大约每天),我听说过刷新令牌。刷新令牌永不过期(或很少过期),并且能够无限期续订令牌。当访问令牌即将过期时,客户端可以通过发送刷新令牌来发送续订请求以获取新的访问令牌。
我不明白一些事情,我可能会错过一些东西:
>
长期/永不过期的刷新令牌如何不会破坏具有短期访问令牌的安全性。
饼干可以被偷走并使用到过期。令牌寿命很短,因此更安全,但如果我提供一个长期刷新令牌,我就失去了使用令牌的优势。
注意:我知道刷新令牌是在初始登录时发送的,因此不能在每个请求中被欺骗,但如果它们在初始请求中被欺骗,它们就容易受到攻击。
我使用以下方法:
表/索引:
认证流程
1.当以前未经身份验证的用户登录时,颁发一个包含访问令牌和刷新令牌的JWT。更新JWT表中的刷新令牌以及user_id和访问令牌。
2.确保 JWT 的过期时间对您的用户来说很小/很舒服。通常不到一个小时。
4.当客户用JWT发出请求时
a、 检查访问令牌的有效期。如果令牌尚未过期-
b.如果访问令牌已过期,请在JWT表中查找user_id,并检查刷新令牌和访问令牌是否匹配,无论客户端提供了什么,
如果是,则发出带有响应的新JWT,并将新的刷新令牌、访问令牌更新到JWT表中。
如果否,则返回 401。客户端被迫要求用户然后登录。
结束。
总之,
1.DB调用仅用于检查刷新令牌是否有效。
2.该系统允许用户使用任意数量的JWT从任意数量的设备登录
3.通过从JWT表中擦除与该用户相关的刷新令牌,所有与用户相关的JWT都可以失效,这可以做到,例如:当用户更改他/她的密码时。这实际上缩小了访问令牌/JWT的到期时间的妥协窗口。
我相信这就是JWT背后的意图。数据库调用/用户的百分比取决于您的到期时间、用户通常在您的网站上的持续时间等。
刷新令牌呈现在与访问令牌不同的路径上:访问令牌仅呈现给资源服务器,刷新令牌仅呈现给授权服务器。访问令牌可以是自包含的,因此它不需要对授权服务器进行昂贵的调用来检查其有效性,但是为了减少损失和增加准确性(在出错的情况下它不能被撤销),它是短暂的。刷新令牌是长期存在的,并且在每次调用授权服务器时都会得到验证,因此它可以被撤销。两者的结合使系统变得安全。
我在身份验证中使用基于令牌的方法,但在许多博客中,我读到他们将令牌存储在数据库中。 我们需要将令牌存储在DB中的基于令牌的身份验证中吗? https://scotch.io/tutorials/the-ins-and-outs-of-token-based-authentication 在这个博客中,提到我们正在签署令牌而不是存储在数据库中,我认为这应该是实现真正无状态的方法。
问题内容: 我有一个REST API,我正在使用Spring Security基本授权进行身份验证,客户端会为每个请求发送用户名和密码。现在,我想实现基于令牌的身份验证,当用户最初通过身份验证时,我将在响应标头中发送令牌。对于进一步的请求,客户端可以在令牌中包含该令牌,该令牌将用于对资源进行用户身份验证。我有两个身份验证提供程序tokenAuthenticationProvider和daoAuth
在daoAuthenticationProvider中,我设置了自定义userDetailsService并通过从数据库中获取用户登录详细信息对其进行身份验证(只要使用授权传递用户名和密码就可以正常工作:basic bgllqxbpvxnlcjogn21wxidmqjrdturtr04pag==作为头) 但是当我使用X-AUTH-TOKEN(即constants.auth_header_name)
问题内容: 我正在PHP Lumen中构建一个应用程序,该应用程序在登录时会返回令牌。我不知道如何继续进行。 我应该如何使用这些令牌维护会话? 具体来说,如果我使用reactjs或原始HTML / CSS / jQuery,如何将令牌存储在客户端,并在我为Web应用程序的安全部分提出的每个请求中发送令牌? 问题答案: 我通常要做的是将令牌保留在本地存储中,这样即使用户离开站点,我也可以保留令牌。
我正在PHP Lumen中构建一个应用程序,它在登录时返回令牌。我不知道如何继续。 我应该如何使用这些令牌维护会话? 具体来说,如果我使用reactjs或vanilla HTML/CSS/jQuery,我如何在客户端存储令牌,并在我为web应用程序的安全部分发出的每个请求中发送它们?
null 我的自定义rest筛选器: 上面的内容实际上会导致应用程序启动时出现一个错误:有人能告诉我如何最好地执行此操作吗?pre_auth筛选器是执行此操作的最好方法吗? 编辑 使用Spring-security实现解决方案 希望它能帮助其他人…