OAuth 访问令牌与会话密钥

信息安全 饼干 会话管理 oauth
2021-08-30 19:09:14

在以下假设下,OAuth 与基于 cookie 的会话(通过用户名/密码建立)有什么优势吗?

  1. 该服务只有一个合法客户端
  2. OAuth 客户端密码已泄露(因此任何人都可以发出有效请求)
  3. OAuth 令牌和会话具有相同的生命周期
  4. 两者都允许以相同的权限访问同一组资源
  5. 任一方案下的所有客户端-服务器通信都通过相同的协议(为了参数,HTTPS)
  6. 客户端和服务器由同一方控制
2个回答

这要看情况...

OAuth 是一种用于创建会话的协议。OAuth 不记名令牌由客户端使用Authentication: BearerHTTP 标头传输。这只是一个通过 http 标头元素传输的加密随机数,实际上(几乎)与cookiehttp 标头元素相同。

它有什么不同?好吧,cookie 的规则与其他标题元素略有不同。cookie 由浏览器维护,并附加到 cookie 所属的每个请求。这就是跨站点请求伪造或会话骑乘攻击起作用的原因。浏览器不关心请求来自哪里,它会根据请求的目的地附加cookie。

OAuth Bearer 令牌有点不同。这些令牌通常由客户端(JavaScript、Flash 甚至一些中间件应用程序)管理。如果您的应用程序使用 JavaScript 来管理身份验证承载令牌,那么该值将不会被浏览器自动应用,因此可以兼作 CSRF 令牌,这很整洁。

但是,如果您将 OAuth 用于中间件,则 CSRF 不会发挥作用,因此它在标头中的显示位置无关紧要。

CSRF 已经受到所有现代浏览器的保护,如果不是简单地基于目标附加 cookie,如果在将其发送到服务器之前验证允许源策略,那么在做了一些研究之后对我来说,oauth2 和基于会话的身份验证都具有相同的安全性风险,唯一的区别是正在使用的标题