No obtengo un mapeo correcto de atributos usando el plugin 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

¿Lograste que esto funcionara?

Hola @Ivan.bacher y @JoreisPy, ¿han tenido éxito en mapear los atributos correctos a través de las configuraciones de discourse-saml?

He estado intentando usar esta configuración en el plugin pero no he tenido suerte hasta ahora:

¡Que tengan un buen día! :slight_smile:

Me encontré con el mismo problema al probar la integración SAML y finalmente logré que funcionara. Con los registros habilitados, verifica el contenido de @attributes, esas son las claves reales que necesitas para el mapeo y no el nombre amigable. Corresponden al atributo Name de los datos XML. En mi caso, el mapeo dentro de app.yml quedó así:

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"

También es importante recompilar después de realizar cambios en la configuración. Después de hacerlo, mapeó correctamente el valor del correo electrónico de mi respuesta SAML.

Gracias por compartir el ejemplo, desde discourse-saml/config/locales/server.en.yml at main · discourse/discourse-saml · GitHub no está claro qué significa el formato exacto.
Además, para futuros plugins SAML, existe la posibilidad de mapear más de un atributo a una variable de Discourse, por lo que el formato básicamente dice:

‘<variable_de_Discourse>:<atributo_SAML1>,<atributo_SAML2>’

1 me gusta

Probablemente no sea el lugar adecuado, pero solo para añadir, necesitarás email, name, first_name, last_name y uid como atributos de Discourse para poder usar el plugin SAML.

Adicionalmente

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

esta parte del código (ten en cuenta que no soy programador de Ruby) sugiere que necesitas mapear todos los atributos a tus atributos para que el sistema pueda funcionar… Intentaré probar esa información (tengo un problema en este momento con el plugin SAML y estoy intentando investigar los problemas).