4

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

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

目前我正在做的是在客户端上设置一个与我在服务器上的会话 ID 匹配的 cookie。这当然等同于普通的基于 cookie 会话的登录。然后在会话中,我会跟踪使用 Auth Code 时获得的访问令牌并将其交换为访问令牌。

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

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

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

4

1 回答 1

0

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

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

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

于 2014-02-14T01:39:08.943 回答