Security 如何在Symfony2上保护两种不同防火墙下的API

Security 如何在Symfony2上保护两种不同防火墙下的API,security,api,rest,symfony-2.1,Security,Api,Rest,Symfony 2.1,我目前正在Symfony2.1上开发一套新的Restfull API,它们目前在我的security.yml中没有防火墙 api: pattern: ^/api security: false 我有一个RequestListener,它通过检查用户是否提供身份验证令牌或使用基本身份验证来“保护”他们。正确登录后,我们用用户填充安全上下文。(也许我们甚至可以用工厂制造防火墙?) 这对于希望在其应用程序中使用我们的API的外部开发人员/组织来说非常有效 现在

我目前正在Symfony2.1上开发一套新的Restfull API,它们目前在我的security.yml中没有防火墙

    api:
        pattern: ^/api
        security: false
我有一个
RequestListener
,它通过检查用户是否提供身份验证令牌或使用基本身份验证来“保护”他们。正确登录后,我们用用户填充安全上下文。(也许我们甚至可以用工厂制造防火墙?)

这对于希望在其应用程序中使用我们的API的外部开发人员/组织来说非常有效

现在,我希望我们在项目中依赖这些相同的API(控制器、ajax调用…),我想知道我们是否必须自己实现API get令牌或基本身份验证过程来填充API的安全上下文,或者他们是否可以以某种方式神奇地检索主防火墙的当前安全上下文。(这会让我省去获取令牌、将其保存在某处并在视图中通过Backbonejs ajax调用传递令牌的尴尬)


谢谢你的想法!:)

首先,对于基本身份验证,您可以依赖Symfony2提供的。不需要使用请求侦听器。如果要使用基于令牌的身份验证,请编写

安全上下文是分开的,不能与其他上下文交互。他们是完全分开的。但是,您可以添加任意数量的身份验证提供程序

使用Backbone.js,您可以保持基于令牌的策略。例如,使用HTML属性将令牌传递给主干:

<body data-token="xxxx">
    ...
</body>

有关更多信息,请参阅。

Thx对于http\U basic,我忽略了这一点,并为我的API重新实现了基本身份验证。。关于令牌身份验证提供者,这只是一个伪装的侦听器,不是吗?昨天我考虑了一些问题:我不能为每个API操作定义两个路由吗?一个在API防火墙下,带有令牌,另一个在我的主Sf2防火墙下。有什么风险、优势和想法?重复配置会在某些时候导致问题。为您的主应用程序使用“超级”令牌可能是最安全的解决方案。身份验证提供商是安全层的一部分,而侦听器不是。因此,您建议让我的用户在控制器/视图的主防火墙下登录一次,并在我的主干应用程序调用我的API时登录两次,即使他们可能从同一个防火墙中获益?好的,明白了。因此,您可以通过主干应用程序(例如表单)对用户进行身份验证,然后通过HTML将令牌传递给主干应用程序。然后使用我答案的第二部分在每个请求上发送令牌。您必须编写一个请求侦听器来验证此令牌。令牌是使用“form.csrf_provider”服务生成的(请参阅CsrfProviderInterface)。
$.ajaxSetup({
    headers: {
        'token': $('body').data('token')
    }
});