[SimpleSAMLphp] "State information lost" Elgg
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
Code:
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> |
Je définis ma base d’identités dans authsource.php :
Code:
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'),
),
)
) ; |
J’enregistre mes SP dans saml20-sp-remote.php :
Code:
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',
); |
Elgg
J'ai installé Elgg sur http://elgg.loc
Code:
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> |
J'utilise le module saml_login développé par uniquidNews
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:
Code:
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,
)); |
Dans mon fichier saml20-idp-remote.php je recopie les informations fournies par mon installation IdP de SimpleSAMLphp :
Code:
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',
); |
Utilisation
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 :
Citation:
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:
1 2 3
| print_r($_COOKIE);
print_r($_SERVER['HTTP_COOKIE']);
print_r($_SESSION); |
Citation:
$_COOKIE
Array
(
[Elgg] => 4s83pf02ep9a8tpl83a4190jt1
)
$_SERVER['HTTP_COOKIE']
Elgg=4s83pf02ep9a8tpl83a4190jt1
$_SESSION
Undefined variable: _SESSION
Je réactualise ma page :
Citation:
$_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