Donde esperaba ver una dirección de correo electrónico regular, ahora veo un valor hexadecimal que presumo es la forma hash de la dirección de correo electrónico. No puedo continuar el proceso de autenticación con estos valores.
¡Cualquier ayuda sobre este tema sería muy apreciada!
¡Hola Ronald ! Nos alegra mucho ver que más y más universidades se unen a la familia Discourse .
¡Tienes un tema bastante interesante! Mi dominio de SAML/SSO no es muy fuerte, así que no estoy seguro de lo que está sucediendo aquí, pero ¿podrías intentar activar la configuración del sitio verbose sso logging? Esto ayudaría a mostrar algunos errores útiles en /logs y quizás explicaría por qué estás teniendo este problema o te daría algo más específico que puedas compartir aquí para que podamos ayudarte mejor.
Mi suposición (y mi experiencia con SAML es limitada, creo que solo una vez ayudé a alguien a configurarlo) es que el problema está en el lado de SAML. O bien está configurado para enviar el hash o estás utilizando de alguna manera el campo incorrecto.
Después de configurar el registro de SSO en modo detallado, esto es lo que encontré en 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)
He reemplazado el certificado con <SNIP> y mi dirección IP con <IP>.
¡Sí! Se ve claramente que SAML está enviando un hash del correo electrónico y el nombre de usuario.
Creo que hay alguna configuración donde mapeas los campos de SAML a los de Discourse, por lo que es concebible que haya algo que puedas cambiar en el lado de Discourse para solucionarlo.
Después de más investigación, descubrí que el código ‘hashed’ en el formulario de registro es en realidad el NameID enviado por el IdP. En la configuración de SAML en el IdP, también habilité los siguientes atributos:
Nombre para mostrar: urn:mace:dir:attribute-def:displayName
Nombre completo: urn:mace:dir:attribute-def:cn
Dirección de correo electrónico: urn:mace:dir:attribute-def:mail
ID de usuario: urn:mace:dir:attribute-def:uid
Un tercero confirmó que estos atributos realmente se envían desde el IdP. Sin embargo, por alguna razón, los valores de estos atributos no se utilizan en el formulario de registro de Discourse (como se mostró anteriormente). Supuse que en el formulario:
Correo electrónico tendría el valor de urn:mace:dir:attribute-def:mail;
Nombre de usuario tendría el valor de urn:mace:dir:attribute-def:mail y
Nombre tendría el valor de urn:mace:dir:attribute-def:displayName (preferiblemente) o urn:mace:dir:attribute-def:cn.
¿Existe alguna forma de configurar Discourse-SAML para mapear correctamente estos atributos?