حيث كنت أتوقع رؤية عنوان بريد إلكتروني عادي، أرى الآن قيمة سداسية عشرية أفترض أنها صيغة تجزئة (hash) لعنوان البريد الإلكتروني. لا يمكنني إكمال عملية المصادقة باستخدام هذه القيم.
مرحبًا رونالد يسعدنا حقًا رؤية المزيد والمزيد من الجامعات تنضم إلى عائلة Discourse
لديك قضية مثيرة للاهتمام جدًا! مهاراتي في SAML/SSO ليست قوية، لذا لست متأكدًا مما يحدث هنا، لكن هل يمكنك تجربة تمكين إعداد الموقع verbose sso logging؟ سيساعد ذلك في إظهار بعض الأخطاء المفيدة في /logs، وربما يوضح سبب حصولك على هذه المشكلة، أو يخبرك بشيء أكثر تحديدًا يمكنك مشاركته هنا، مما سيسمح لنا بمساعدتك بشكل أفضل.
تخميني (وعملي مع SAML محدود، أعتقد أنني ساعدت شخصًا واحدًا فقط في تكوينه) هو أن المشكلة تكمن في جانب SAML. إما أنه مُهيأ لإرسال التجزئة، أو أنك تستخدم حقلًا خاطئًا بطريقة ما.
بعد تعيين سجلات SSO إلى وضع verbose، إليك ما وجدته في 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>.
بعد إجراء المزيد من البحث، اكتشفت أن الرمز ‘المشفّر’ في نموذج التسجيل هو في الواقع NameID الذي يرسله مزود الهوية (IdP). في إعدادات SAML على مزود الهوية، قمت أيضًا بتفعيل السمات التالية:
الاسم المعروض: urn:mace:dir:attribute-def:displayName
الاسم الكامل: urn:mace:dir:attribute-def:cn
عنوان البريد الإلكتروني: urn:mace:dir:attribute-def:mail
معرف المستخدم: urn:mace:dir:attribute-def:uid
أكد طرف ثالث أن هذه السمات تُرسل فعليًا من قبل مزود الهوية. ولكن لسبب ما، لا تُستخدم قيم هذه السمات في نموذج التسجيل في Discourse (كما هو موضح سابقًا). افترضت أنه في النموذج:
يجب أن يحتوي حقل البريد الإلكتروني على قيمة urn:mace:dir:attribute-def:mail؛
يجب أن يحتوي حقل اسم المستخدم على قيمة urn:mace:dir:attribute-def:mail؛
ويجب أن يحتوي حقل الاسم إما على قيمة urn:mace:dir:attribute-def:displayName (يفضل ذلك) أو urn:mace:dir:attribute-def:cn.
هل توجد طريقة يمكنني من خلالها تكوين Discourse-SAML لربط هذه السمات بشكل صحيح؟