Dove mi sarei aspettato di vedere un indirizzo e-mail regolare, ora vedo un valore esadecimale che presumo essere la versione in hash dell’indirizzo e-mail. Non riesco a continuare il processo di autenticazione con questi valori.
Qualsiasi aiuto su questo argomento sarebbe molto apprezzato!
Ciao Ronald Siamo davvero felici di vedere sempre più università unirsi alla famiglia Discourse
Hai un problema piuttosto interessante! Non sono molto esperto di SAML/SSO, quindi non sono sicuro di cosa stia succedendo qui, ma puoi provare ad abilitare l’impostazione del sito verbose sso logging? Questo potrebbe mostrare alcuni errori utili su /logs e magari spiegare perché stai riscontrando questo problema o indicarti qualcosa di più specifico che puoi condividere qui, così potremo aiutarti meglio.
Il mio parere (e la mia esperienza con SAML è limitata, credo di aver aiutato qualcuno a configurarlo solo una volta) è che il problema sia lato SAML. O è configurato per inviare l’hash o stai in qualche modo utilizzando il campo sbagliato.
Dopo aver impostato il logging SSO su verbose, ecco cosa ho trovato in 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)
Ho sostituito il certificato con <SNIP> e il mio indirizzo IP con <IP>.
Sì! Si vede chiaramente che SAML sta inviando un hash dell’email e del nome utente.
Penso che esista una configurazione in cui mappi i campi SAML su quelli di Discourse, quindi è plausibile che ci sia qualcosa che puoi modificare su Discourse per risolvere il problema.
Dopo ulteriori ricerche, ho scoperto che il codice ‘hashed’ nel modulo di registrazione è in realtà il NameID inviato dall’IdP. Nella configurazione SAML sull’IdP ho anche abilitato i seguenti attributi:
Nome visualizzato: urn:mace:dir:attribute-def:displayName
Nome completo: urn:mace:dir:attribute-def:cn
Indirizzo email: urn:mace:dir:attribute-def:mail
ID utente: urn:mace:dir:attribute-def:uid
Un terzo ha confermato che questi attributi vengono effettivamente inviati dall’IdP. Tuttavia, per qualche motivo, i valori di questi attributi non vengono utilizzati nel modulo di registrazione di Discourse (come mostrato in precedenza). Avevo ipotizzato che nel modulo:
il campo Email avrebbe ricevuto il valore di urn:mace:dir:attribute-def:mail;
il campo Username avrebbe ricevuto il valore di urn:mace:dir:attribute-def:mail;
il campo Nome avrebbe ricevuto il valore di urn:mace:dir:attribute-def:displayName (preferibilmente) o di urn:mace:dir:attribute-def:cn.
Esiste un modo per configurare Discourse-SAML in modo che mappi correttamente questi attributi?