L'authentification avec SAML donne le nom d'utilisateur et l'e-mail hachés

Bonjour,

Je souhaite authentifier les utilisateurs de mon installation de Discourse avec notre système SAML de l’université.

J’utilise la version Docker de Discourse avec le plugin SAML. J’ai essayé de suivre les instructions disponibles sur la page GitHub de ce plugin.

Tout fonctionne correctement jusqu’à l’apparition du formulaire suivant :


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 !

Cordialement,
Ronald

Bonjour Ronald :slight_smile: :wave:, nous sommes vraiment ravis de voir de plus en plus d’universités rejoindre la famille Discourse :smiley: !

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.

Merci beaucoup pour votre réponse rapide !

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>.

Merci pour votre réponse rapide !

Cela pourrait aussi être le cas ! Je vais contacter l’émetteur SAML et les informer du hachage…

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
  • Nom complet : urn:mace:dir:attribute-def:cn
  • Adresse e-mail : urn:mace:dir:attribute-def:mail
  • Identifiant utilisateur : urn:mace:dir:attribute-def:uid

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 ?

Bonjour @ronligt, des succès dans la cartographie des bons attributs via les configurations discourse-saml ?

J’ai essayé d’utiliser cette configuration dans le plugin mais sans succès jusqu’à présent :

Passez une bonne journée ! :slight_smile: