我最近使用不同的精心挑选的技术开始了一个新项目,我的项目构建如下:
该方法是以 API 为中心的,这意味着我正在构建一个网站和一个 iOS 应用程序,它与使用Symfony2
. 我已经成功地编写了我的 API,并且它运行良好。要访问 API 提供的服务,主要参与者(网站用户、iOS 应用程序用户和开发人员)可以通过多种方式进行身份验证:
客户端可以通过网站界面通过登录/密码对获得访问权限,该界面通过 AJAX 直接与 API 通信,以验证提供的凭据并设置会话。因此,当有人登录我们的网站时,他们也可以自动访问 API。
开发人员可以通过 API 使用
HTTP-Basic
over进行身份验证SSL
,这也将生成一个会话并授予他们访问他们被授权调用的服务的权限。此外,开发人员和客户可以通过Facebook Connect功能使用他们的 Facebook 帐户访问网站和 API 。这删除了每个参与者必须在我们的网站上创建帐户的步骤。
因此,基本上,凭据是通过HTTP-Basic
或使用Facebook Login
功能提供的。
现在我的身份验证系统正在运行并且我的客户能够访问该网站,我希望他们在登录时连接到实时服务器。如果您想要实时服务器管理的位置,就像在 Facebook 或 Google+ 中一样聊天和推送信息。
在这种情况下,我正在使用Node.js
强大的socket.io
库来管理处理实时方面的所有内容。当然,实时服务将需要一些凭据来验证用户,因为他通过会话向 Symfony 安全系统进行了身份验证,但没有针对实时服务器进行身份验证。
我一直在考虑的一个解决方案是PdoSessionStorage
在我的 API(Symfony 端)中使用,并将所有活动会话存储在 MySQL 或 PostgreSQL 等数据库中。这样做,我将能够将 symfony 生成的会话 ID 发送到我的实时服务器,并检查数据库提供的会话 ID 是否正确。如果他是,我会让用户访问我的实时服务器提供的服务,并将他的会话与身份相关联。但我真的不知道这是否是一个好的解决方案,我想要一些更有经验的建议,以及如何处理这个问题。
OAuth
注意:由于某些原因,即使它可能是使用单点登录方法解决此问题的解决方案,我也无法实施。