Au lieu d’une adresse e-mail habituelle, j’observe une valeur hexadécimale que je suppose être la forme hachée de l’adresse e-mail. Je ne peux pas poursuivre le processus d’authentification avec ces valeurs.
Toute aide sur ce sujet serait grandement appréciée !
Bonjour Ronald , nous sommes vraiment ravis de voir de plus en plus d’universités rejoindre la famille Discourse !
Vous rencontrez un problème assez intéressant ! Ma maîtrise de SAML/SSO n’est pas très solide, donc je ne suis pas certain de ce qui se passe ici, mais pourriez-vous essayer d’activer le paramètre du site verbose sso logging ? Cela permettrait d’afficher des erreurs plus utiles sur /logs et peut-être d’expliquer pourquoi vous rencontrez ce problème, ou de vous fournir des informations plus précises que vous pourrez partager ici, ce qui nous permettrait de mieux vous aider.
Mon hypothèse (et mon expérience avec SAML est limitée, je pense n’avoir aidé quelqu’un à le configurer qu’une seule fois) est que le problème se situe côté SAML. Soit il est configuré pour envoyer le hachage, soit vous utilisez d’une manière ou d’une autre le mauvais champ.
Après avoir activé le journalisation détaillée du SSO, voici ce que j’ai trouvé dans le production.log :
Started GET "/session/csrf" for <IP> at 2020-07-24 14:32:51 +0000
Processing by SessionController#csrf as JSON
Completed 200 OK in 1ms (Views: 0.1ms | ActiveRecord: 0.0ms | Allocations: 321)
Started POST "/auth/saml" for <IP> at 2020-07-24 14:32:51 +0000
(saml) Request phase initiated.
Started POST "/auth/saml/callback" for <IP> at 2020-07-24 14:33:23 +0000
(saml) Callback phase initiated.
Processing by Users::OmniauthCallbacksController#complete as HTML
Parameters: {"SAMLResponse"=>"<SNIP>", "provider"=>"saml"}
Redirected to https://discourse-imphys.tudelft.nl/
Completed 302 Found in 24ms (ActiveRecord: 0.0ms | Allocations: 10562)
Started GET "/" for <IP> at 2020-07-24 14:33:24 +0000
Processing by ListController#latest as HTML
Rendering list/list.erb within layouts/application
Rendered list/list.erb within layouts/application (Duration: 3.8ms | Allocations: 1991)
Rendered layouts/_head.html.erb (Duration: 1.9ms | Allocations: 911)
Rendered common/_discourse_stylesheet.html.erb (Duration: 0.4ms | Allocations: 267)
Rendered application/_header.html.erb (Duration: 2.2ms | Allocations: 1022)
Completed 200 OK in 34ms (Views: 13.1ms | ActiveRecord: 0.0ms | Allocations: 15963)
Started GET "/u/hp.json" for <IP> at 2020-07-24 14:33:24 +0000
Processing by UsersController#get_honeypot_value as JSON
Completed 200 OK in 2ms (Views: 0.2ms | ActiveRecord: 0.0ms | Allocations: 812)
Started GET "/u/check_username?username=&email=94422472fbfb32fdd22eaa2f88c723fb44be9958" for <IP> at 2020-07-24 14:33:25 +0000
Processing by UsersController#check_username as JSON
Parameters: {"username"=>"", "email"=>"94422472fbfb32fdd22eaa2f88c723fb44be9958"}
Completed 200 OK in 1ms (Views: 0.2ms | ActiveRecord: 0.0ms | Allocations: 316)
Started GET "/u/check_username?username=94422472fbfb32fdd22e&email=94422472fbfb32fdd22eaa2f88c723fb44be9958" for <IP> at 2020-07-24 14:33:25 +0000
Processing by UsersController#check_username as JSON
Parameters: {"username"=>"94422472fbfb32fdd22e", "email"=>"94422472fbfb32fdd22eaa2f88c723fb44be9958"}
Completed 200 OK in 3ms (Views: 0.2ms | ActiveRecord: 0.0ms | Allocations: 1421)
J’ai remplacé le certificat par <SNIP> et mon adresse IP par <IP>.
Oui ! On voit clairement que SAML envoie un hachage de l’adresse e-mail et du nom d’utilisateur.
Je pense qu’il existe une configuration permettant de mapper les champs SAML sur ceux de Discourse, il est donc concevable qu’il y ait quelque chose que vous puissiez modifier du côté de Discourse pour résoudre le problème.
Après avoir effectué davantage de recherches, j’ai découvert que le code « hashed » dans le formulaire d’inscription correspond en réalité au NameID envoyé par le fournisseur d’identité (IdP). Dans la configuration SAML de l’IdP, j’ai également activé les attributs suivants :
Nom affiché : urn:mace:dir:attribute-def:displayName
Un tiers a confirmé que ces attributs sont bien envoyés par l’IdP. Cependant, pour une raison inconnue, les valeurs de ces attributs ne sont pas utilisées dans le formulaire d’inscription de Discourse (comme montré précédemment). J’avais supposé que dans le formulaire :
Le champ Email contiendrait la valeur de urn:mace:dir:attribute-def:mail ;
Le champ Username contiendrait la valeur de urn:mace:dir:attribute-def:mail ;
Le champ Name contiendrait soit la valeur de urn:mace:dir:attribute-def:displayName (de préférence), soit celle de urn:mace:dir:attribute-def:cn.
Existe-t-il un moyen de configurer Discourse-SAML pour mapper correctement ces attributs ?