Symfony2:子域之间的透明授权过程

时间:2011-08-14 10:24:31

标签: php authorization subdomain symfony

所有!

我只是看到symfony2路由器不使用uri的主机部分。 我需要将COUNTRY分隔为第三个子域,将locale分隔为路径路径中的第一个元素

http:// {country} .mysite.com / {_locale} / myaction,ie。

en.mysite.com/en/action ---英国公司&英语

de.mysite.com/ru/action --- deutschland公司&俄语

ru.mysite.com/uk/action ---俄罗斯公司&乌克兰语

问题通过以下服务解决:

-- config.yml

services:
   kernel.listener.subdomain_listener:
       class: Acme\DemoBundle\Listener\SubdomainListener
       tags:
           - { name: kernel.event_listener, event: kernel.request, method: onDomainParse }

-- SubdomainListener.php

<?php

namespace Acme\DemoBundle\Listener;

use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\Event;

class SubdomainListener
{
   public function onDomainParse(Event $event)
   {
       $request = $event->getRequest();
       $session = $request->getSession();

       // todo: parsing subdomain to detect country

       $session->set('subdomain', $request->getHost());
   }
}

但......问题是: 如何在几个子域之间实现AUTH过程是可能的(正确的) 透明只有一次??

  1. 用户通过en.mysite.com / {_ locale} / ...

  2. 登录
  3. 用户访问de.mysite.com / {_ locale} / ...但是系统知道他(她)并且没有再次询问登录/密码凭证

  4. 有人帮助我吗? 谢谢你提前! 认证高级Oracle开发人员/ DBA

1 个答案:

答案 0 :(得分:15)

您可以通过设置正确的Cookie域轻松完成此操作。这样,所有子域都可以访问标识用户会话的cookie。

您要做的是将您的Cookie域设置为:.mysite.com(是的,开头的一个点)。

为此,请在config.yml文件中设置以下配置:

framework:
    session:
        cookie_domain: .mysite.com

注意:如果您使用安全组件中的remember_me,则可能需要在remember_me section of your firewall上设置域。

附录:在Symfony 2.0中,相关设置为“域名”。它在2.1中被弃用。