【发布时间】:2012-07-12 13:02:27
【问题描述】:
所以我们正在Symfony2 中开发一个Web 应用程序(简短的社论:Symfony2 真是太棒了)沿着SOA 的思路。所有数据都在我们的 jQuery 驱动的前端和格式化为 la JSON 的 Symfony2 后端之间来回传输,这就是问题所在。
Symfony2 提供了一个强大的安全系统,但它似乎取决于“安全层”拦截表单提交并使用表单编码的 POST 数据来处理身份验证尝试。这对我们的应用程序来说是有问题的,因为我们只使用 JSON。从我的立场来看,对每个请求和响应都使用 JSON except 身份验证是......坦率地说,这是一张布尔表。难闻的气味,坏的juju,不管你怎么称呼它。
现在,Symfony2 允许创建事件侦听器,这些侦听器连接到与请求的生命周期和完整响应相关的一系列事件。我们使用其中一个钩子来解码每个 POST 请求附带的 JSON,以便相关控制器只需要担心直接使用 php 数组,而无需进行任何解码或反序列化或其他操作。
因此,我们问题的症结在于“安全层”期望从表单提交(通常在后端首先服务的页面上)获得表单编码的 POST 数据。我们准备为它提供一个从 JSON 化数据创建的 PHP 数组。那怎么办?我们应该:
- 创建一个自定义身份验证服务,用于处理由 le JSON 制成的数组?
- 调整我们的请求挂钩以检查每个请求的目标 uri,然后将请求的 JSON 转换为“安全层”期望的表单编码字符串?
- 调整“安全层”以便它可以处理 JSON 转换的 php 数组?
【问题讨论】:
-
+1 欢迎来到 SO。我喜欢看到这样的问题,它们试图进一步推动一个强大的系统。另外,我喜欢你的“布尔表”行。
-
你在哪里看到 Symfony 期望“表单编码的 POST”? sf2中实现了各种认证机制,form post只是其中之一。
-
@MDrollete 嗯,这是个好问题。该详细信息 特定于表单发布方法。我们的思路是,form post 方法的功能最接近我们需要发生的事情,即我们可以在 uri 上触发数据有效负载(文件用户名和文件密码),并让后端进行身份验证。它。其他方法很糟糕(http auth)或涉及我们真正不需要的整个协议层(digest,x509)。