我和我的团队目前正在开展一个相当大的项目。我们正在开发一款在线游戏,(目前)可以通过两种方式访问​​:-通过网络浏览器,应用程序完整的JavaScript(客户端),完整的Ajax(基本上意味着UI将在JS客户端进行管理)。-通过 iPhone 应用程序(UI 将由应用程序本身管理)。

在两个不同的应用程序之间,核心逻辑保持不变,因此我相信(我可能是错的),最好的解决方案是创建一个能够保留所有必要的 Web 服务(如果可能的话,使用 RESTful 或 Rest 等标准)运营。

按照这个逻辑,我遇到了一个问题:用户的认证和身份管理。这会带来问题,因为应用程序用户需要经过身份验证才能执行某些操作。

我研究过 WS-security,但这显然需要在服务器上存储未加密的密码,这是不可接受的!然后我研究了 Oauth,但乍一看,这似乎需要大量的设置工作,并且不太适合我的需求(必须接受应用程序的方式并不令我满意,因为这将是我的应用程序,并且只是我的应用程序使用网络服务,而不是任何外部应用程序)。我读过并听说过很多其他方法来做我想做的事,但说实话,我有点困惑,我不知道哪些信息可靠,哪些信息不可靠。

我想指出的是,我使用 symfony2 作为后端,使用 jquery 作为客户端 JavaScript。此外,我想要一个详细的、逐步的答复,因为我真的对我所读到和听到的一切感到困惑。

谢谢您的宝贵时间,我希望有人能帮助我,因为事情很紧急。

晚上好

有帮助吗?

解决方案

我不完全确定这是否满足您的请求,但由于 UI 始终在客户端处理,我认为您可以使用无状态 HTTP 身份验证:

这是防火墙 security.yml:

security:
    firewalls:
        api:
            pattern: ^/api/ # or whatever path you want
            http_basic: ~
            stateless: true

然后这个想法基本上是,在服务器上,您使用普通的用户提供程序、编码器等来实现最大的安全性,而在客户端上,您发送 HTTP 身份验证标头,例如,在 jQuery 中:

$.ajax("...", {
    username: "Foo",
    password: "bar"
});

请注意,由于身份验证是无状态的(不会创建 cookie),因此每个请求都必须发送标头,但是,我认为,由于应用程序几乎完全是客户端,所以这不是问题。

您还可以检查 Symfony2安全手册 有关如何设置 HTTP 身份验证的更多信息。另请务必在 ACL 中强制进行 HTTPS 访问,以便包含凭据的请求受到保护(requires_channel: https 在您的 ACL 定义中)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top