Bonjour à tous.
J'essai de mettre en place un SSO entre Elgg et eZ Publish.
J'ai choisi d'utiliser SimpleSAMLphp pour faire ça.
Comme beaucoup de monde j'ai un problème de "State information lost".
Je travail en local sous windows.
Pour le moment je me concentre sur la partie SimpleSAMLphp - Elgg
Installation
SimpleSAMLphp
J’ai installé SimpleSAMLphp en IdP sur http://saml.loc
Je définis ma base d’identités dans authsource.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 <VirtualHost *:80> ServerName saml.loc DocumentRoot "C:\wamp\www\saml\www" Alias /simplesaml "C:\wamp\www\saml\www" <Directory "/simplesaml"> allow from all </Directory> </VirtualHost>
J’enregistre mes SP dans saml20-sp-remote.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 $config = array( 'admin' => array( 'core:AdminPassword', ), 'example-userpass' => array( 'exampleauth:UserPass', 'student:studentpass' => array( 'uid' => array('test'), 'eduPersonAffiliation' => array('member', 'student'), ), 'employee:employeepass' => array( 'uid' => array('employee'), 'eduPersonAffiliation' => array('member', 'employee'), ), ) ) ;
Elgg
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $metadata['http://elgg.loc/simplesaml/module.php/saml/sp/metadata.php/default-sp'] = array ( 'AssertionConsumerService' => 'http://elgg.loc/simplesaml/module.php/saml/sp/saml2-acs.php/default-sp', 'SingleLogoutService' => 'http://elgg.loc/simplesaml/module.php/saml/sp/saml2-logout.php/default-sp', );
J'ai installé Elgg sur http://elgg.loc
J'utilise le module saml_login développé par uniquidNews
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <VirtualHost *:80> ServerName elgg.loc DocumentRoot "C:\wamp\www\elgg\www" Alias /simplesaml "C:\wamp\www\elgg\simplesamlphp\www" </VirtualHost>
http://community.elgg.org/plugins/838203/1.2
J'ai configuré mon module comme cela dans mon interface d'administration de Elgg.
Path of the SimpleSAMLPHP environment: C:\wamp\www\elgg\simplesamlphp
The SP auth source you want to connect to elgg: default-sp
The attribute whose value uniquely identifies a user object: uid
Dans mon fichier authsource.php je définit mon IdP:
Dans mon fichier saml20-idp-remote.php je recopie les informations fournies par mon installation IdP de SimpleSAMLphp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 $config = array( 'default-sp' => array( 'saml:SP', 'entityID' => NULL, 'idp' => 'http://saml.loc/simplesaml/saml2/idp/metadata.php', 'discoURL' => NULL, ));
Utilisation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 $metadata['http://saml.loc/simplesaml/saml2/idp/metadata.php'] = array ( 'name' => array('Fr' => "Serveur d'identification"), 'description' => "MON serveur d'identification à moi.", 'metadata-set' => 'saml20-idp-remote', 'entityid' => 'http://saml.loc/simplesaml/saml2/idp/metadata.php', 'SingleSignOnService' => array (0 => array ( 'Binding' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect', 'Location' => 'http://saml.loc/simplesaml/saml2/idp/SSOService.php', ),), 'SingleLogoutService' => 'http://saml.loc/simplesaml/saml2/idp/SingleLogoutService.php', 'certData' => '...', 'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:transient', );
Je me rends sur mon réseau social Elgg
http://elgg.loc
Le bouton « Uniquid » du module apparait bien dans le formulaire de connexion.
Lorsque je clique dessus je suis bien redirigé vers mon IdP http://saml.loc ou je peux saisir mes identifiants.
Mais lors que je reviens sur mon site j’obtiens le message suivant :
State information lost, and no way to restart the request
Si vous signalez cette erreur, veuillez aussi signaler l'identifiant de suivi qui permet de trouver votre session dans les logs accessibles à l'administrateur système : b2bdc2a41c
Information de déboguage
SimpleSAML_Error_NoState: NOSTATE
Backtrace:
2 C:\wamp\www\elgg\simplesamlphp\lib\SimpleSAML\Auth\State.php:240 (SimpleSAML_Auth_State::loadState)
1 C:\wamp\www\elgg\simplesamlphp\modules\saml\www\sp\saml2-acs.php:68 (require)
0 C:\wamp\www\elgg\simplesamlphp\www\module.php:135 (N/A)
Debug
J’ajoute du debug supplémentaire.
Au début du fichier saml2-acs.php de SimpleSAMLphp installé dans elgg :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 print_r($_COOKIE); print_r($_SERVER['HTTP_COOKIE']); print_r($_SESSION);Je réactualise ma page :$_COOKIE
Array
(
[Elgg] => 4s83pf02ep9a8tpl83a4190jt1
)
$_SERVER['HTTP_COOKIE']
Elgg=4s83pf02ep9a8tpl83a4190jt1
$_SESSION
Undefined variable: _SESSION
$_COOKIE
Array
(
[Elgg] => 4s83pf02ep9a8tpl83a4190jt1
[PHPSESSID] => 92814a4545e0ff9aa2fb093a6e8b3dea
)
$_SERVER['HTTP_COOKIE']
Elgg=4s83pf02ep9a8tpl83a4190jt1; PHPSESSID=92814a4545e0ff9aa2fb093a6e8b3dea
$_SESSION
Undefined variable: _SESSION
Je ne vois pas quoi faire pour résoudre mon problème.
Merci par avance pour votre aide.
Si vous avez des questions n’hésitez pas à les pauser afin que je puisse compléter l’exposé de mon problème.
Quelques liens :
http://fr.wikipedia.org/wiki/SAML
http://code.google.com/p/simplesamlphp/wiki/LostState
Partager