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

Hello,

I am trying to integrate our shibboleth with our discourse instance. For now logging in works but I am getting the wrong data (name, email, etc…)

here is part of the data coming from the 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>

here is the error log:

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"]

I would say the issue has to do with the FriendlyName, as it doesnt match any of the options in saml_authenticator.rb:

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

Since friendly name repeats itself for every atribute I am not sure how to make the mapping. Has anyone an idea of how to deal with this?

Thank you

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

مرحباً @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>’

إعجاب واحد (1)

ربما ليس المكان المناسب ولكن فقط للإضافة، ستحتاج إلى البريد الإلكتروني و الاسم و الاسم الأول و اسم العائلة و معرف المستخدم مثل سمة 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 وأحاول التحقيق في المشكلات).