Em vez do endereço de e-mail regular que eu esperava ver, agora vejo um valor hexadecimal, que presumo ser a forma hash do endereço de e-mail. Não consigo continuar o processo de autenticação com esses valores.
Qualquer ajuda sobre este tópico seria muito apreciada!
Olá, Ronald estamos muito felizes em ver cada vez mais universidades se juntando à família Discourse
Você tem um problema bastante interessante! Minha experiência com SAML/SSO não é muito forte, então não tenho certeza do que está acontecendo aqui, mas você pode tentar ativar a configuração do site verbose sso logging? Isso ajudaria a mostrar alguns erros úteis em /logs e talvez explicar por que você está enfrentando esse problema ou fornecer algo mais específico que você possa compartilhar aqui, para que possamos ajudar melhor.
Minha suposição (e minha experiência com SAML é limitada; acho que só ajudei alguém a configurá-lo uma vez) é que o problema está no lado do SAML. Ou ele está configurado para enviar o hash, ou você está de alguma forma usando o campo errado.
Após configurar o log do SSO para verbose, foi isso que encontrei no 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)
Substituí o certificado por <SNIP> e meu endereço IP por <IP>.
Sim! Dá para ver claramente que o SAML está enviando um hash do e-mail e do nome de usuário.
Acho que existe alguma configuração onde você mapeia os campos do SAML para os do Discourse, então é plausível que haja algo que você possa alterar no lado do Discourse para corrigir isso.
Após mais pesquisas, descobri que o código ‘hashed’ no formulário de registro é, na verdade, o NameID enviado pelo IdP. Na configuração do SAML no IdP, também ativei os seguintes atributos:
Nome de exibição: urn:mace:dir:attribute-def:displayName
Nome completo: urn:mace:dir:attribute-def:cn
Endereço de e-mail: urn:mace:dir:attribute-def:mail
ID do usuário: urn:mace:dir:attribute-def:uid
Um terceiro confirmou que esses atributos são realmente enviados pelo IdP. No entanto, por algum motivo, os valores desses atributos não são utilizados no formulário de registro do Discourse (como mostrado anteriormente). Eu assumi que, no formulário:
O campo E-mail teria o valor de urn:mace:dir:attribute-def:mail;
O campo Nome de usuário teria o valor de urn:mace:dir:attribute-def:mail;
O campo Nome teria o valor de urn:mace:dir:attribute-def:displayName (preferencialmente) ou urn:mace:dir:attribute-def:cn.
Existe alguma maneira de configurar o Discourse-SAML para mapear esses atributos corretamente?