0

アプリの SSO ソリューションに取り組んでいます。ユーザーがログインするメインドメイン accounts.mydomain.com があります。ログインに成功したら、他のすべてのドメインでユーザーを認証する必要があります。

ユーザーがログインするたびに、認証トークンを作成し、各ドメインの接続メソッドを呼び出します。これにより、トークンが読み取られ、データベースからユーザーが取得され、そのユーザーがそのドメインにログインします。

すべて正常に動作していますが、ユーザーは他のドメインでユーザー セッションを保持できません。

これは私のコードです:(symfony 1.4を使用):

My main login action:
<?php
     // get a auth token for the user
       (...)

      // cycle through all my domains and make a curl request to the connect action of each one
     // passing the auth token
      foreach(sfConfig::get('app_connect_urls') as $url){
                $url.= '?auth_token='.$authToken;

                $ch = curl_init();
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, false);
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

                $curlResult = curl_exec($ch);

                $curl_errno = curl_errno($ch);
                $curl_error = curl_error($ch);

curl によって呼び出される他のドメインの接続アクション

$authToken = $request->getParameter('auth_token');
// $user =  get user from token (...)


   $this->getUser()->signIn($user);
   echo $this->getUser()->isAuthenticated() // returns true;
    return sfView::NONE;

そのドメインにアクセスすると、ユーザーは認証されません。アクションを直接呼び出すと、セッションが永続化されます。

ご協力いただきありがとうございます。

4

1 に答える 1

0

異なるドメインのアプリケーションでの SSO/認証には、SAMLを使用することをお勧めします

PHPを使用しているため、SimpleSAMLphpは IdP (ID プロバイダー) 部分を構築するための優れたソフトウェアになります。

symfony の SP (サービス プロバイダー) を実装するには、このプロジェクトを確認してください: sfSAMLPlugin

于 2011-11-23T22:09:37.893 に答える