2012-01-20 54 views
3

我一直在尝试使用symfony2进行一段时间的设置,并且它已经进行了很长一段时间,但我遇到了一些障碍。我无法弄清楚如何获得我的安全设置。在我们的机构中​​,我们安装了cas(单点登录)和一个处理所有身份验证内容的静态类。它被称为看门人。 Gatekeeper完成所有的角色检查和用户名登录。我希望能够使用symfony2的授权内容,但没有任何验证内容。这可能吗?我已阅读文档,但似乎这些东西太紧密地分开了。有没有人有任何关于这个话题的见解?Symfony2的安全设置没有登录

回答

3

如果您使用网守类请求之前验证打你,你可以创建防火墙“预认证”监听器(即验证防火墙之前发生)通过延长AbstractPreAuthenticatedListener和实施getPreAuthenticatedData()

class GatekeeperListener extends AbstractPreAuthenticatedListener 
{ 
    protected function getPreAuthenticatedData(Request $request) 
    { 
     return array(
      Gatekeeper::getCurrentUsername(), // username 
      '',        // credentials 
     ); 
    } 
} 

您需要创建一个安全工厂,以便为系统引入一个新的身份验证侦听器。这个过程是这样的食谱文章中描述:

How to create a custom Authentication Provider: The Factory

security.yml应该是这个样子:

security: 
    factories: 
     - "%kernel.root_dir%/../src/Acme/DemoBundle/Resources/config/security_factories.yml" 

    firewalls: 
     main: 
      pattern: . 
      gatekeeper: true 
+0

克里斯,感谢您的回复。我终于解决了这个问题,还有一个问题。凭证是返回数组的一部分吗?是逗号分隔的一组角色还是一组角色?感谢您的有益回应。我不认为PreAuthenicatedListener在Symfony2文档中的任何地方都被提及(除了API)。 –

+2

该数组中的第二项将是用户的密码,但您可以只返回一个空字符串。 –

+0

好克里斯,我想我有更多的工作,但现在我不断收到“在SecurityContext中找不到令牌”异常。令牌插入安全上下文的位置在哪里?我是否需要这样做,还是应该由我的用户提供商在理论上发生这种情况? –