php - OAuth 和 Cookie

标签 php session authentication cookies oauth

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

使用 Oauth 登录时记住客户端 session 的最佳方式是什么。

目前我正在做的是在客户端设置一个 cookie 来匹配我在服务器上的 session ID。这当然等同于正常的基于 cookie session 的登录。然后在 session 中,我跟踪使用授权码时获得的访问 token 并将其交换为访问 token 。

如您所见,状态通过 cookie/ session ID 在客户端和服务器之间保持同步,访问 token 仅保存在服务器中并与 session ID 相关。

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

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

最佳答案

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

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

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

关于php - OAuth 和 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18999598/

相关文章:

php - 在为这种情况设计数据库时遇到问题

c# - 如何使用 WebSockets 跟踪已建立的连接

javascript - 如何使用 AngularJS 客户端在 Loopback 应用程序内创建 session ?

python - 如何在 Python 中从 Mechanize 获取当前 URL?

c# - 尽管登录成功,ASP.NET 表单例份验证始终为 false

django - 如何实现基于JqueryMobile、AngularJs、PhoneGap的移动Django客户端认证

php - 从mysql db查询特殊字符

如果单词不存在,PHP 删除 div

php - 如何使用 Goutte 进行代理认证?

php - session_set_start_handler 抛出警告