【问题标题】:webservice authentication and user identity managementWeb服务认证和用户身份管理
【发布时间】:2025-12-02 06:00:02
【问题描述】:

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

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

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

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

我想指出,我在后端使用 symfony2,在客户端 JavaScript 使用 jquery。 此外,我想要一份详细的、逐步的答复,因为我真的对我所阅读和听到的所有内容感到困惑。

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

晚上好

【问题讨论】:

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


    【解决方案1】:

    我不完全确定这是否能满足您的要求,但由于 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)。

    【讨论】:

      最近更新 更多