Je ne comprends pas la correspondance correcte des attributs avec le plugin SAML

Bonjour,

Je tente d’intégrer notre Shibboleth avec notre instance Discourse. Pour l’instant, la connexion fonctionne, mais je reçois les mauvaises données (nom, e-mail, etc.).

Voici une partie des données provenant du 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>

Voici le journal d’erreurs :

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

Je dirais que le problème est lié au FriendlyName, car il ne correspond à aucune des options dans saml_authenticator.rb :

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

Puisque le nom amical se répète pour chaque attribut, je ne suis pas sûr de savoir comment effectuer la correspondance. Quelqu’un a-t-il une idée de la manière de gérer cela ?

Merci

Avez-vous réussi à faire fonctionner cela ?

Bonjour @Ivan.bacher et @JoreisPy , des succès dans la cartographie des bons attributs via les configurations discourse-saml ?

J’ai essayé d’utiliser cette configuration dans le plugin mais sans succès jusqu’à présent :

Passez une bonne journée ! :slight_smile:

J’ai rencontré le même problème en testant l’intégration SAML et j’ai finalement réussi à la faire fonctionner. Avec les journaux activés, vérifiez le contenu de @attributes, ce sont les clés réelles dont vous avez besoin pour le mappage et non le nom convivial. Ils correspondent à l’attribut Name des données XML. Dans mon cas, le mappage dans app.yml est devenu :

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"

Il est également important de reconstruire après les modifications apportées à la configuration. Après cela, il a correctement mappé la valeur de l’e-mail de ma réponse SAML.

Merci d’avoir partagé cet exemple. D’après discourse-saml/config/locales/server.en.yml at main · discourse/discourse-saml · GitHub, le format exact n’est pas clair. De plus, pour les futurs plugins SAML, il est possible de mapper plus d’un attribut à une variable Discourse, donc le format indique essentiellement :

‘<variable_Discourse>:<attribut_SAML1>,<attribut_SAML2>’

Probablement pas le bon endroit mais juste pour ajouter, vous aurez besoin de email, name, first_name, last_name et uid comme attributs Discourse pour pouvoir utiliser le plugin SAML.

De plus

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

cette partie du code (sachant que je ne suis pas un programmeur Ruby) suggère que vous devez mapper tous les attributs à vos attributs pour que le système fonctionne… J’essaierai de tester cette information (j’ai un problème au moment avec le plugin SAML et j’essaie d’enquêter sur les problèmes).