لا أحصل على تطابق صحيح للسمات باستخدام إضافة SAML

مرحبًا،

أحاول دمج Shibboleth الخاص بنا مع مثيل Discourse لدينا. حاليًا، يعمل تسجيل الدخول، لكنني أحصل على بيانات خاطئة (الاسم، البريد الإلكتروني، إلخ…).

إليك جزء من البيانات الواردة من SSO:

    <saml2:Attribute FriendlyName="givenName" Name="urn:oid:2.5.4.42" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
      <saml2:AttributeValue>Joao Miguel</saml2:AttributeValue>

وإليك سجل الأخطاء:

SAML Debugging: saml_auth: {:uid=>"AAdzZWNyZXQ0uudwQFYHs1n7nrvB/A4t4l6q+6aAXInZRL4XIO+mnEEEq4t8UwBnzJRh50mnTGDsQAPvWThJNaUNR6smCochT1I2oXwvyoU4lQG+5hbVmCvkkmYDPOujrvgNloXWNg==", :info=>{"name"=>nil, "email"=>nil, "first_name"=>nil, "last_name"=>nil, "nickname"=>nil}.......   @attributes={............."urn:oid:2.5.4.42"=>["Joao Miguel"]

أعتقد أن المشكلة تتعلق بـ FriendlyName، حيث لا يتطابق مع أي من الخيارات في saml_authenticator.rb:

statements = “name:name|email:email,mail|first_name:first_name,firstname,firstName|last_name:last_name,lastname,lastName|nickname:screenName”

بما أن FriendlyName يتكرر لكل سمة، فأنا لست متأكدًا من كيفية إجراء التحويل. هل لدى أحدكم فكرة حول كيفية التعامل مع هذا؟

شكرًا لك

هل تمكنت من جعل هذا يعمل؟

مرحباً @Ivan.bacher و @JoreisPy، هل هناك أي نجاح في تعيين السمات الصحيحة عبر إعدادات discourse-saml؟

لقد كنت أحاول استخدام هذا الإعداد في المكون الإضافي ولكن لم أنجح حتى الآن:

أتمنى لك يوماً سعيداً! :slight_smile:

لقد واجهت نفس المشكلة أثناء اختبار تكامل SAML وتمكنت أخيرًا من جعله يعمل. مع تمكين السجلات، تحقق من محتوى @attributes، فهذه هي المفاتيح الفعلية التي تحتاجها للربط وليس الاسم الودي. وهي تتوافق مع السمة Name من بيانات XML. في حالتي، أصبح الربط داخل app.yml كالتالي:

DISCOURSE_SAML_REQUEST_ATTRIBUTES: "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"
DISCOURSE_SAML_ATTRIBUTE_STATEMENTS: "email:http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"

من المهم أيضًا إعادة البناء بعد إجراء تغييرات على التكوين. بعد القيام بذلك، قام بربط قيمة البريد الإلكتروني بشكل صحيح من استجابة SAML الخاصة بي.

شكرا لمشاركة المثال، من discourse-saml/config/locales/server.en.yml at main · discourse/discourse-saml · GitHub ليس من الواضح ما يعنيه التنسيق بالضبط.
بالإضافة إلى ذلك، بالنسبة لمكون SAML الإضافي المستقبلي، هناك إمكانية لتعيين أكثر من سمة واحدة لمتغير Discourse، لذا يخبر التنسيق بشكل أساسي:

‘<متغير Discourse>:<سمة SAML1>,<سمة SAML2>’

ربما ليس المكان المناسب ولكن فقط للإضافة، ستحتاج إلى البريد الإلكتروني و الاسم و الاسم الأول و اسم العائلة و معرف المستخدم مثل سمة Discourse لاستخدام المكون الإضافي SAML.

بالإضافة إلى ذلك

def attribute_statements
    result = {}
    statements =
      "name:fullName,name|email:email,mail|first_name:first_name,firstname,firstName|last_name:last_name,lastname,lastName|nickname:screenName"
    custom_statements = setting(:attribute_statements)

    statements = "#{statements}|#{custom_statements}" if custom_statements.present?

    statements
        .split("|")
        .map do |statement|
          attrs = statement.split(":", 2)
          next if attrs.count != 2
          (result[attrs[0]] ||= []) << attrs[1].split(",")
          result[attrs[0]].flatten!
        end

    result
  end

هذا الجزء من الكود (مع الأخذ في الاعتبار أنني لست مبرمج Ruby) يشير إلى أنك بحاجة إلى تعيين جميع السمات إلى سماتك التي قد يعمل بها النظام … سأحاول اختبار تلك المعلومات (لدي مشكلة في لحظة مع إضافة SAML وأحاول التحقيق في المشكلات).