Autenticación con SAML 2.0

SAML 2.0

SAML2.0 (Security Assertion Markup Language 2.0) es un sistema de autenticación y autorización entre dominios basado en tokens de seguridad . A continuación vamos a ver cómo configurar el SSO contra el proveedor de identidad, en este caso LastPass.com.

 

Configuración en LastPass.com

Athento ECM tiene la capacidad de proveer del descriptor de configuración del proveedor de servicio para SAML2. Para ello, basta con acceder a la siguiente URL de la instancia: http://dev.athento.com/nuxeo/saml/metadata

En el siguiente ejemplo vemos el descriptor de seguridad que nos servirá para indicarle a LastPass.com qué valores de ID de Entidad y AssertionConsumerService debe tomar. 

Ejemplo para instancia de Athento ECM
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" entityID="http://dev.athento.com/nuxeo">
	<md:SPSSODescriptor AuthnRequestsSigned="false" WantAssertionsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
		<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://dev.athento.com/nuxeo/nxstartup.faces">
			<md:NameIDFormat>
				urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
			</md:NameIDFormat>
			<md:NameIDFormat>
				urn:oasis:names:tc:SAML:2.0:nameid-format:transient
			</md:NameIDFormat>
			<md:NameIDFormat>
				urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
			</md:NameIDFormat>
			<md:NameIDFormat>
				urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
			</md:NameIDFormat>
			<md:NameIDFormat>
				urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName
			</md:NameIDFormat>
			<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="http://dev.athento.com/nuxeo/nxstartup.faces" index="0" isDefault="true"/>
			<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://dev.athento.com/nuxeo/nxstartup.faces" index="1" isDefault="false"/>
	</md:SPSSODescriptor>
</md:EntityDescriptor>

LastPass.com cuenta con la funcionalidad de importar dicho descriptor directamente copiándolo desde Athento ECM en un cuadro de texto. 

Configuración del dominio


Configuración en Athento ECM

Para habilitar SAML2.0 en Athento es necesario instalar el addon localizado en:

http://colibri.athento.com/Athento/Nuxeo/addons/saml2-authentication-1.0.0-SNAPSHOT.zip

y además, crear un fichero de contribución en el directorio $NX_HOST/nxserver/config/saml2-config.xml donde se incluirá el componente de autenticación para el SSO contra el proveedor de identidad, en nuestro caso LastPass.com. En él, vamos a incluir la extensión para autenticador y para la cadena de autenticación a usar.

 

Componentes para SAML2
<component name="org.athento.nuxeo.login.saml.auth">

   <require>org.nuxeo.ecm.platform.ui.web.auth.WebEngineConfig</require>
   <require>org.nuxeo.ecm.platform.ui.web.auth.defaultConfig</require>

   <extension target="org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService"
               point="authenticators">
        <authenticationPlugin name="SAML_AUTH" enabled="true"
                              class="org.nuxeo.ecm.platform.auth.saml.SAMLAuthenticationProvider">
            <loginModulePlugin>Trusting_LM</loginModulePlugin>
            <needStartingURLSaving>true</needStartingURLSaving>
            <parameters>
                <parameter name="name">https://lastpass.com/saml/idp</parameter>
                <parameter name="metadata">nxserver/config/lastpass-athento-saml-metadata.xml</parameter>
                <!-- Timeout in seconds -->
                <parameter name="timeout">5</parameter>
            </parameters>
        </authenticationPlugin>
    </extension>

    <extension
          target="org.nuxeo.ecm.platform.ui.web.auth.service.PluggableAuthenticationService"
          point="chain">
      <authenticationChain>
          <plugins>
              <plugin>BASIC_AUTH</plugin>
              <plugin>SAML_AUTH</plugin>
              <plugin>FORM_AUTH</plugin>
          </plugins>
      </authenticationChain>
  </extension>
</component>

En la contribución anterior cabe destacar, fundamentalmente, el parámetro

<parameter name="metadata">nxserver/config/lastpass-athento-saml-metadata.xml</parameter>

dentro de la contribución para el plugin de autenticación, donde se hace referencia al fichero XML con el contenido del descriptor de identidad (IDP) exportado desde LastPass.com. Este archivo XML puede descargarse directamente con el enlace de LastPass.com que tenemos en la configuración de nuestra instancia, en el enlace que podemos ver en la imagen de "configuración de dominio" vista arriba: Export SAML IdP Metadata

Fichero XML de IDP

nxserver/config/lastpass-athento-saml-metadata.xml ha sido creado con el contenido exportado desde LastPass.com

Una vez que tengamos configurado Athento ECM con la configuración del IPD (LastPass.com) ya podríamos acceder a nuestra instancia haciendo SSO contra LastPass.com teniendo en cuenta que por defecto, Athento ECM víncula el identificador de LastPass al email del usuario.

 

Si queremos realizar un mapping de usuarios de LastPass.com, éste nos permite realizarlo en la zona USERMAP. En dicha zona establecemos el usuario de LastPass.com contra un usuario de Athento ECM basado, por defecto, en el email. A continuación se muestra un ejemplo de mapeo de usuarios, donde 3 usuarios de LastPass.com autenticarán en Athento ECM con el usuario vs@athento.com, que en este caso puede ser el Administrador.

 

Mapping de usuarios entre LastPass.com y Athento ECM

IMPORTANTE

SAML2.0 realiza varias aserciones de seguridad entre el traspaso de tokens para realizar la validación. Una de ellas es el timing entre el IPS (Athento ECM) y el IDP (LastPass.com) que debe estar ajustada y nunca superar el cliente al servidor en fecha.