OAuth and Cookies


OAuth and Cookies

我目前正在使用 2.0 实施 OAuth 身份验证 3 腿策略。我遇到了一个问题:

使用 Oauth 登录时记住客户端会话的最佳方式是什么?

目前,我正在做的是在客户端上设置一个与我在服务器上的会话ID匹配的cookie。这当然相当于基于cookie会话的正常登录。然后在会话中,我跟踪使用身份验证代码并将其交换为访问令牌时获得的访问令牌。

如您所见,状态通过 cookie/会话 ID 在客户端和服务器之间保持同步,并且访问令牌仅保留在服务器中并与会话 ID 相关。

但是,我读到这是不安全的,并且OAuth应该是无状态(休息(样式,因此不需要cookie,特别是如果客户端是机器客户端而不是浏览器客户端。一些资源提到客户端应存储所有必要的凭据,以便对应用程序的任何请求进行身份验证。这是否意味着我应该将访问令牌存储在浏览器的标头中?来自重定向的身份验证代码呢,它是否也应该存储在浏览器的标头上?(以及这些代码/令牌是否应该在浏览器的标头上加密/签名((你会如何使用PHP来做到这一点?

像这样的资源:http://sitr.us/2011/08/26/cookies-are-bad-for-you.html 说客户端丰富的javascript应用程序可以跟踪访问令牌并在每个XHR请求时传递它?但当然,并非每个客户端都是 JavaScript 应用程序,例如机器客户端。

不应将令牌存储在常规会话中。它是无状态的想法是每个请求都携带所有必需的验证信息。

当然,这可能需要在客户端进行更多工作,以确保所有请求都携带所有必需的数据。

REST 无状态的好处之一是拥有分布式实现更简单。每个请求都有所有必要的数据,因此您甚至不需要两次访问同一台服务器,每个服务器都可以自行验证。