众所周知,Rest服务是无状态的,一般的身份验证策略是使用基于令牌的身份验证。
在登录服务中,它接受返回令牌的凭证。
此令牌可以在客户端cookie中设置,所有后续请求都使用此令牌进行验证,并在令牌有效时处理新请求。
现在我的问题是如何验证令牌?如果有人窃取了令牌并试图通过编辑cookie来使用窃取的令牌访问其他服务,那么如何识别和限制它?
我们永远无法知道令牌是否由有效用户获取,并且同一用户正在尝试访问后续请求。但是,有哪些可能的方法可以使其更加困难,例如验证请求是否来自同一来源?
一个普遍的建议是为令牌/cookie设置老化,但是在令牌/cookie老化之前仍然没有帮助。
任何建议将不胜感激。
经过各种方法的挣扎,我们找到了一个解决方案,解释如下:
解决方案:-
所以为了解决这个问题,我们添加了另一个cookie,它是多个值的组合。
例如
饼干1-
饼干 2 -
因此,在Cookie 1的情况下,很容易用另一个加密值替换,因为尽管它是加密的,但它只代表一个令牌。
但是在 Cookie 2 的情况下,它包含具有多个值的对象,因此只能在同一 cookie 中修改、加密和设置令牌值。
在身份验证之前,我们正在解密整个cookie 2,从中获取令牌部分,并根据cookie 1验证令牌部分。
这解决了我们的问题!!
感谢您的时间和指导。
我目前对浏览器中授权请求的“最安全”方法的理解是,需要同时验证HttpOnly SameSite cookie和HTTP标头(例如Authorization
或X-CSRF-Token
)。
例如,向浏览器发出 JWT 时,在 HttpOnly SameSite
cookie 中发送 JWT 签名,并将正文(无签名)发送到客户端以存储在 localStorage
中并在授权
标头中提交。授权请求时,将两者合并回完整的 JWT 中,然后照常验证。
或者,您可以生成两个带有字段的 JWT 来区分它们(例如,客户端中有“浏览器
”,cookie 有“cookie”
),并要求两者都有效并且都标识同一用户。一个在授权
标头中发送并存储在localStorage
中,另一个使用SameSite HttpOnly
cookie。
另一种流行的html" target="_blank">方法是将 CSRF 令牌存储在 JWT 的字段中,并将 JWT 放入 cookie 中,并要求客户端在标头中发送匹配的令牌(例如 X-CSRF-Token
)。
所有解决方案都有效地防止了XSS和CSRF攻击:XSS无法检索HttpOnly cookie,CSRF不包含HTTP标头,因此可以阻止这两种攻击。
请注意,您可能只想将此规则应用于来自 Web 浏览器的请求。对于服务器到服务器的通信,请求不受 CSRF 和 XSS 攻击。
我不相信有任何100%傻瓜证明的方法来防止使用被盗的用户令牌进行访问。你怎么知道令牌一开始就被盗了?但在我的脑海中,您可能需要考虑以下内容:
我在做一个全堆栈的web应用程序。我的前端由angular-cli组成,后端由node+Express构建。
场景是:您有一个有效期较长的刷新令牌和一个有效期限较短的访问令牌。 设置:有一个客户端、应用程序服务器和身份验证服务器。 客户端存储访问令牌。 应用程序服务器存储刷新令牌。 身份验证服务器分发刷新访问令牌。 其中一个优点是被盗的访问令牌只能在其有效的时间内使用。 假设黑客窃取了有效期为30分钟的访问令牌。当黑客在30分钟后用有效但过期的被盗访问令牌发出请求时,应用服务器用刷新令牌刷新它,从而黑客获
本文向大家介绍如何防止cookie被盗用?相关面试题,主要包含被问及如何防止cookie被盗用?时的应答技巧和注意事项,需要的朋友参考一下 禁止第三方网站带cookie(same-site属性) 每次请求需要输入图形验证码 使用Token验证 为cookie设置HttpOnly 设置CSP 使用Referer验证 禁止网页内嵌 使用https cookie带上用户ip加密
致命:“https://github.com/scuzzlebuzzle/ol3-1.git/'”身份验证失败
问题内容: 在使用Java EE 6的Web应用程序上,我想将某些功能作为Json Rest Service公开。我想使用身份验证令牌进行登录,用户将发送其用户名,密码,服务器将发送回令牌,该令牌将用于授权用户在给定时间内的进一步请求。 到目前为止,有几个问题困扰着我; 当服务器创建令牌并将其发送给客户端时,服务器是否应该使用像哈希表这样的东西作为用户ID令牌对将其保存在DB或Bean中? 我可以
我们使用应用服务身份验证来保护网络 API,并使用 Google 作为身份验证提供程序。当我们从浏览器触发请求时(当会话信息在cookie中时),它按预期工作 IIS日志: 2016-05-29T13:51:19 PID[3600]详细接收请求:GEThttps://XXXXXX.azurewebsites.net/api/user2016-05-29T13:51:19 PID[3600]详细找到