我和我的团队目前正在进行一个相当大的项目。我们正在开发一款在线游戏,(目前)可以通过两种方式访问:-通过web浏览器、应用程序、完整的JavaScript(客户端)、完整的Ajax(基本上意味着UI将在JS客户端进行管理)。-通过iPhone应用程序(UI将由应用程序本身管理)。
在两个不同的应用程序之间,核心逻辑保持不变,所以我相信(我可能错了),最好的解决方案是创建一个能够允许所有必要操作的web服务(如果可能的话,使用RESTful或Rest等标准)。
按照这个逻辑,我遇到了一个问题:用户的身份验证和身份管理。这带来了问题,因为应用程序用户需要经过身份验证才能预执行某些操作。
我已经研究过WS安全性,但这显然需要在服务器上存储未加密的密码,这是不可接受的!然后我查看了Oauth,但乍一看,这似乎需要做很多工作,并不特别适合我的需求(接受申请的方式让我不高兴,因为这将是我的申请,我的申请只使用web服务,而不是任何外部应用程序)。我读过很多关于做我想做的事情的其他方法,但说实话,我有点困惑,我不知道什么信息是可靠的,什么不是。
我想指出的是,我使用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访问,以便确保包含凭据的请求的安全(ACL定义中的requires_channel: https
)。