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

时间:2012-08-15 09:03:16

标签: security api rest symfony-2.1

我目前正在Symfony2.1上开发一套新的Restfull API,而且我的security.yml目前还没有防火墙。

    api:
        pattern: ^/api
        security: false

我有RequestListener通过检查用户是否提供Auth令牌或使用Basic Auth来“保护”它们。正确登录后,我们会向用户填充安全上下文。 (也许我们甚至可以使用工厂制作防火墙?)

这适用于希望在其应用中使用我们的API的外部开发人员/组织。

现在,我希望我们在项目中使用这些相同的API(控制器,ajax调用..),我现在想知道我们是否必须自己实现API get-token或Basic Auth进程来填充API的安全上下文,或者他们是否可以以某种方式神奇地检索主防火墙的当前安全上下文。 (这样可以省去我签署令牌的尴尬,将它保存到某处并通过我的Backbonejs ajax在我的视图中一直调用它。)

感谢您对此的想法! :)

1 个答案:

答案 0 :(得分:1)

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

安全上下文是分开的,您无法与其他上下文交互。它们是完全分区的。但是,您可以根据需要添加任意数量的身份验证提供程序。

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

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

然后,只需在JavaScript应用中使用它:

$.ajaxSetup({
    headers: {
        'token': $('body').data('token')
    }
});

有关详细信息,请参阅$.ajaxSetup doc