Json 用于基于令牌的身份验证的JWT与Cookie
我读了一些关于“JWT vs Cookie”的帖子,但它们只会让我更加困惑Json 用于基于令牌的身份验证的JWT与Cookie,json,authentication,cookies,jwt,Json,Authentication,Cookies,Jwt,我读了一些关于“JWT vs Cookie”的帖子,但它们只会让我更加困惑 我想澄清一下,当人们谈论“基于令牌的身份验证与cookies”时,cookies这里仅仅指的是会话cookies?我的理解是,cookie就像一种媒介,它可以用来实现基于令牌的身份验证(存储一些可以在客户端上识别登录用户的东西)或基于会话的身份验证(在客户端存储一个与服务器端上的会话信息相匹配的常数) 为什么我们需要JSON web令牌?我使用标准cookie来实现基于令牌的身份验证(不使用会话id,不使用服务器内存或文
设置cookie:user=innomy;首选颜色=azure
,我观察到的唯一区别是JWT同时包含有效负载和签名…而您可以选择http头的签名或明文cookie。在我看来,签名cookie(cookie:'time=s%3a14647434488946.WvSJxbCspOG3aiGi4zCMMR9yBdvS%2B6Ob2f3OG6%2FYCJM'
)更节省空间,唯一的缺点是客户端无法读取令牌,只有服务器可以读取……但我认为这很好,因为就像JWT中的声明是可选的一样,令牌没有必要有意义承载令牌和cookie之间的最大区别在于浏览器将自动发送cookie,其中承载令牌需要显式添加到HTTP请求中 此功能使Cookie成为保护网站安全的好方法,用户可以使用链接登录并在页面之间导航 浏览器自动发送cookies还有一个很大的缺点,那就是攻击。在CSRF攻击中,恶意网站利用浏览器会自动将身份验证cookie附加到该域的请求,并欺骗浏览器执行请求这一事实 假设位于的网站允许经过身份验证的用户通过
POST
-ing将新密码更改为,而无需发布用户名或旧密码
如果您在访问恶意网站时仍登录到该网站,而该网站在浏览器中加载了一个页面,从而触发对该地址的发布,则浏览器将忠实地附加身份验证cookies,从而允许攻击者更改您的密码 Cookie也可以用来保护web服务,但现在最常用的是承载令牌。如果您使用cookie来保护web服务,则该服务需要存在于为其设置身份验证cookie的域上,因为不会将cookie发送到其他域
此外,Cookie使非基于浏览器的应用程序(如移动到平板电脑的应用程序)更难使用您的API。除了MvdD所说的自动发送Cookie之外:
document.cookie = 'my_cookie_name=my_cookie_value' // JavaScript
Set-Cookie: my_cookie_name=my_cookie_value // HTTP Response Header
web浏览器会自动将每个请求的cookie发送到cookie的域
GET http://www.bigfont.ca
Cookie: my_cookie_name=my_cookie_value // HTTP Request Header
承载令牌是进入任何HTTP请求的授权
头的值。它不会自动存储在任何地方,没有到期日期,也没有关联的域。这只是一个价值。我们手动将该值存储在客户机中,并手动将该值添加到HTTP授权头中
GET http://www.bigfont.ca
Authorization: Bearer my_bearer_token_value // HTTP Request Header
和基于令牌的身份验证
当我们进行基于令牌的身份验证时,例如OpenID、OAuth或OpenID Connect,我们会从信任接收一个访问令牌(有时是id令牌)