Web服务身份验证和用户身份管理

时间:2012-03-09 21:02:32

标签: web-services authentication webservice-client user-management user-identification

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

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

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

我已经研究过WS-security,但这显然需要在服务器上存储未加密的密码,这是不可接受的! 然后我调查了Oauth,但是乍一看这似乎要做很多工作而不是特别适合我的需求(应用程序必须被接受的方式不能取悦我,因为它只是我的应用程序和我的应用程序而已使用Web服务,而不是任何外部应用程序)。 我已经阅读并听说过很多其他方法可以做我想要的事情,但说实话,我有点困惑,我不知道哪些信息是可靠的,哪些不是。

我想说明我正在使用symfony2作为后端,jquery用于客户端JavaScript。 此外,我想要一个详细的,逐步的回应,因为我真的很困惑我所读过的所有内容。

感谢您的时间,我希望有人可以帮助我,因为这很紧急。

晚上好

1 个答案:

答案 0 :(得分:0)

我不完全确定这是否能解决您的请求,但由于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 security manual以获取有关如何设置HTTP身份验证的更多信息。还要确保在ACL中强制进行HTTPS访问,因此包含凭据的请求是安全的(在ACL定义中为requires_channel: https)。