Вместо ожидаемого адреса электронной почты я вижу шестнадцатеричное значение, которое, как я предполагаю, представляет собой хэш адреса электронной почты. Я не могу продолжить процесс аутентификации с такими значениями.
Любая помощь по этой теме будет очень признательна!
Привет, Рональд очень рады видеть, что всё больше университетов присоединяется к семье Discourse
У вас довольно интересная проблема! Мои знания в области SAML/SSO не очень глубоки, поэтому я не уверен, что именно происходит, но попробуйте включить настройку сайта verbose sso logging. Это поможет отобразить полезные ошибки на странице /logs и, возможно, объяснит причину вашей проблемы или укажет на что-то более конкретное, что вы сможете поделиться здесь, чтобы мы могли лучше помочь.
Мое предположение (и мой опыт работы с SAML ограничен: кажется, я лишь один раз помогал кому-то его настроить) состоит в том, что проблема на стороне SAML. Либо он настроен на отправку хеша, либо вы каким-то образом используете не то поле.
После включения подробного логирования SSO вот что я нашёл в 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)
Я заменил сертификат на <SNIP>, а свой IP-адрес — на <IP>.
Да! Видно, что SAML отправляет хэш электронной почты и имени пользователя.
Думаю, есть какая-то конфигурация, где вы сопоставляете поля SAML с полями Discourse, поэтому вполне вероятно, что можно что-то изменить на стороне Discourse, чтобы это исправить.
После дополнительного исследования я выяснил, что код ‘hashed’ в форме регистрации на самом деле является NameID, отправляемым IdP. В конфигурации SAML на стороне IdP я также включил следующие атрибуты:
Сторонний источник подтвердил, что эти атрибуты действительно отправляются IdP. Однако по какой-то причине значения этих атрибутов не используются в форме регистрации Discourse (как показано ранее). Я предполагал, что в форме:
Поле Email будет содержать значение атрибута urn:mace:dir:attribute-def:mail;
Поле Username — значение атрибута urn:mace:dir:attribute-def:mail;
Поле Name — либо значение атрибута urn:mace:dir:attribute-def:displayName (предпочтительно), либо urn:mace:dir:attribute-def:cn.
Существует ли способ настроить Discourse-SAML для корректного сопоставления этих атрибутов?