Symfony2 - 没有会话 cookie 的有状态 API 密钥认证

Posted

技术标签:

【中文标题】Symfony2 - 没有会话 cookie 的有状态 API 密钥认证【英文标题】:Symfony2 - Stateful API key authentication without session cookie 【发布时间】:2014-12-30 00:08:12 【问题描述】:

我关注了这篇关于使用 Symfony 进行 API 密钥身份验证的文章:

http://symfony.com/doc/current/cookbook/security/api_key_authentication.html

它很好地解释了身份验证部分,但似乎没有解释请求之间的状态如何在正常会话之外工作。

但在某些情况下(如 OAuth 流程),令牌可能会在 只有一个请求。在这种情况下,您需要对用户进行身份验证 并将该身份验证存储在会话中,以便用户 为每个后续请求自动登录。

这是有道理的,但是如果仅在第一个请求中提供令牌,用户如何在后续请求中链接回会话?我不能使用会话 cookie,因为 CORS 限制不允许我这样做。

我基本上想要实现的是一个 API,我可以将登录凭据发布到,以换取允许我将请求链接回会话的访问令牌。

任何人都可以帮助填补一些空白,或提出更好的方法吗?

【问题讨论】:

【参考方案1】:

这是有道理的,但是如果仅在第一个请求中提供令牌,用户如何在后续请求中链接回会话?

如果您使用本机会话处理程序,只要您在 Symfony 中请求会话,php 的会话处理程序就会自动将您的会话和会话 ID 以及会话 cookie 发送到客户端。

我不能使用会话 cookie,因为 CORS 限制不允许我这样做。

那么您不能使用仅在开始时(第一次请求)提供安全密钥的身份验证机制,而在后续请求中不发送任何其他 api 密钥。

我基本上想要实现的是一个 API,我可以将登录凭据发布到,以换取允许我将请求链接回会话的访问令牌。

然后完全按照链接的文档正在执行的操作。为接受凭据并返回 api 密钥的每个人额外提供一个路由(不受保护)。然后,该 api 密钥将用于所有后续请求,如链接文档中所述。

【讨论】:

以上是关于Symfony2 - 没有会话 cookie 的有状态 API 密钥认证的主要内容,如果未能解决你的问题,请参考以下文章

即使我正在工作,会话也会过期,会话生命周期,Ajax 和 Symfony2

session cookie

Symfony 会话不可用异常

Symfony2 会话和缓存:清除命令

记住我功能在 Symfony2 中不起作用

php 会话控制(禁用cookie后session为什么会失效?)