SAML

Si utiliza un proveedor de identidades basado en SAML, puede configurar App ID para iniciar una experiencia de inicio de sesión único (SSO). En este tipo de flujo, App ID actúa como proveedor de servicios y proporciona tokens de seguridad para sus usuarios activos mensuales (MAU).

SAML

Security Assertion Markup Language (SAML) es un estándar abierto que se utiliza para intercambiar datos de autenticación y de autorización entre el proveedor que certifica una identidad y el proveedor que consume la información sobre identidad. SAML 2.0 se basa en XML y es un marco bien establecido para los estándares de autenticación y autorización.

El protocolo SAML proporciona un puente entre App ID (proveedor de servicios) y el proveedor de identidad. Cuando el proveedor de identidades autentica un usuario, crea señales SAML que contienen información sobre el usuario como, por ejemplo, cómo se autentican, los atributos que están asociados al usuario o los parámetros de autorización. Consulte la tabla siguiente para ver ejemplos.

Comprender los tipos de información devuelta en un token SAML
Tipo de información Ejemplos
Autenticación Los usuarios pueden autenticarse con una contraseña, utilizando MFA o de otra forma.
Atributos Cualquier atributo, como por ejemplo grupos a los que pertenecen o alguna preferencia de cualquier tipo.
Decisiones de autorización En ocasiones se puede otorgar a algunos usuarios más o menos permisos que a otros.

¿Qué aspecto tiene el flujo?

Aunque la infraestructura de SAML se utiliza para autenticar el usuario, App ID sigue utilizando un protocolo OIDC más moderno para intercambiar señales de seguridad con la aplicación. Consulte la imagen siguiente para ver un flujo de información detallado.

SAML flujo de autenticación empresarial Cómo funciona un flujo de autenticación empresarial
SAML

  1. Un usuario accede a la página de inicio de sesión o a un recurso restringido de su aplicación, que inicia una solicitud al punto final de App ID /authorization a través de un SDK o API de App ID. Si el usuario no está autorizado, el flujo de autenticación empieza con una redirección a App ID.
  2. App ID genera una solicitud de autenticación de SAML (AuthNRequest) y el navegador redirige automáticamente al usuario al proveedor de identidad de SAML.
  3. El proveedor de identidad analiza la solicitud SAML, autentica al usuario y genera una respuesta SAML con sus aserciones.
  4. El proveedor de identidad redirige al usuario y la respuesta de vuelta a App ID con la respuesta SAML.
  5. Si la autenticación es satisfactoria, App ID crea señales de acceso y de identidad que representan la autorización y la autenticación de un usuario y las devuelve a la app. Si la autenticación falla, App ID devuelve el código de error del proveedor de identidad a la app.
  6. El usuario tiene otorgado el acceso a la app o a los recursos protegidos.

¿Cómo cambia SSO el flujo?

El flujo de trabajo correspondiente a SSO es similar. La única diferencia con el flujo de trabajo descrito está en el paso 3 de la sección anterior. Con SSO habilitado, antes de que se solicite a un usuario que se autentique, el proveedor de identidad comprueba si un usuario ya tiene una sesión de autenticación establecida. En caso afirmativo, no se solicita al usuario que se autentique y el flujo continúa como de costumbre. Si no hay una sesión de SSO disponible, el usuario se redirige a una página de inicio de sesión. También es posible que se le redirija si el proveedor de identidad no puede hacer coincidir los requisitos de autenticación que se definen en la solicitud de App ID con lo que utiliza para establecer el SSO. Por ejemplo, si el proveedor de identidad establece una sesión de SSO de usuario utilizando biometría, se debe cambiar la autenticación predeterminada de App ID. De forma predeterminada, App ID espera que los usuarios se autentiquen con una contraseña sobre HTTPS: urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport.

Aserciones

Cuando se devuelve la aserción de SAML a App ID, el servicio federa la identidad de usuario y genera las señales adecuadas. Si la aserción SAML se corresponde a una de las reclamaciones estándares de OIDC, se añade automáticamente a la señal de identidad. Las aserciones que no tienen una coincidencia, se pasan por alto de forma predeterminada. Si el proveedor de SAML devuelve otras aserciones, es posible configurar App ID para inyectar la información en las señales. Pero asegúrese de no añadir más información de la necesaria a sus tokens, ya que suelen enviarse en cabeceras HTTP y son limitados.

Las reclamaciones de OIDC estándares que App ID intenta correlacionar con su aserción:

  • name
  • email
  • locale
  • picture

Si uno o varios de estos valores cambian en el lado del proveedor de identidad, los nuevos valores estarán disponibles después de que el usuario inicie sesión de nuevo.

¿Cómo espera App ID que sea una aserción SAML?

El servicio espera que una aserción SAML sea similar a la del ejemplo siguiente.

<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="s2202bbbbafa9d270d1c15990b738f4ab36139d463" InResponseTo="_e4a78780-35da-012e-8ea7-0050569200d8" Version="2.0" IssueInstant="2011-03-21T11:22:02Z" Destination="https://example.example.com/">
  <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">idp_entityId</saml:Issuer>
  <samlp:Status xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <samlp:StatusCode  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
  </samlp:Status>
  <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Version="2.0" ID="pfx539c9774-de5c-5f52-0c3f-b1c2e2697a89" IssueInstant="2018-01-29T13:02:58Z" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
    <saml:Issuer>idp_entityId</saml:Issuer>
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
      <ds:SignedInfo>
        <ds:CanonicalizationMethod Algorithm="one_of_supported_algo"/>
        <ds:SignatureMethod Algorithm="one_of_supported_algo"/>
        <ds:Reference URI="#pfx539c9774-de5c-5f52-0c3f-b1c2e2697a89">
          <ds:Transforms>
            <ds:Transform Algorithm="one_of_supported_algo"/>
            <ds:Transform Algorithm="one_of_supported_algo"/>
          </ds:Transforms>
          <ds:DigestMethod Algorithm="one_of_supported_algo"/>
          <ds:DigestValue>huywDPPfOEGyyzE7d5hjOG97p7FDdGrjoSfes6RB19g=</ds:DigestValue>
        </ds:Reference>
      </ds:SignedInfo>
 <ds:SignatureValue>BAwNZFgWF2oxD1ux0WPfeHnzL+IWYqGhkM9DD28nI9v8XtPN8tqmIb5y4bomaYknmNpWYn7TgNO2Rn/XOq+N9fTZXO2RybaC49iF+zWibRIcNwFKCCpDL6H6jA5eqJX2YKBR+K6Yt2JPoUIRLmqdgm2lMr4Nwq1KYcSzQ/yoV5W0SN/V5t8EfctFoaXVPdtfHVXkwqHeufo+L4gobFt9NRTzXB0SQEClA1L8hQ+/LhY4l46k1D0c34iWjVLZr+ecQyubf7rekOG/R7DjWCFMTke822dR+eJTPWFsHGSPWCDDHFYqB4QMinTvUnsngjY3AssPqIOjeUxjL3p+GXn8IQ==</ds:SignatureValue>
    </ds:Signature>
    <saml:Subject>
      <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">JohnDoe@gmail.com</saml:NameID>
    </saml:Subject>
    <saml:Conditions NotBefore="2018-01-29T12:59:58Z" NotOnOrAfter="2018-01-29T13:05:58Z">
    </saml:Conditions>
</samlp:Response>

¿Qué tipos de algoritmos admite App ID?

App ID utiliza el algoritmo RSA-SHA256 para procesar firmas digitales XML.

Configuración de los proveedores de identidad de SAML para que funcionen con App ID

Puede configurar los proveedores de identidad de SAML para que trabajen con App ID proporcionando metadatos de App ID a su proveedor de identidad, y metadatos de su proveedor de identidad a App ID.

Suministro de metadatos a su proveedor de identidad

Para configurar la app, debe proporcionar información a un proveedor de identidad compatible con SAML. La información se intercambia mediante un archivo XML de metadatos que también contiene datos de configuración que se utilizan para establecer la confianza.

No puede habilitar SAML hasta después de configurarlo como un proveedor de identidades.

  1. En el separador Gestionar del panel de control de App ID, pulse Editar en la fila SAML para configurar los valores.

  2. Pulse Descargar archivo de metadatos SAML. El proveedor de identidad espera la información siguiente del archivo.

    La información que se encuentra en su archivo de metadatos
    Variable Descripción
    EntityID El identificador que permite al proveedor de identidades saber que App ID ha emitido la solicitud SAML.
    Location URL La ubicación que el proveedor de identidad envía a las aserciones de SAML tras autenticar correctamente un usuario.
    Binding Las instrucciones sobre cómo el proveedor de identidades debe enviar la respuesta SAML.
    NameID Format Cómo sabe el proveedor de identidad qué formato de identificador debe enviar en el asunto de una aserción y cómo identifica App ID a los usuarios. El ID debe tener el formato siguiente: &lt;saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"&gt;.
    WantAssertionsSigned La forma en que un proveedor de identidades comprueba si necesita firmar la aserción. El servicio espera a que se firme la aserción, pero no da soporte a las aserciones cifradas.
    KeyDescriptor Los certificados de firma y cifrado de SAML que se pueden utilizar para configurar el proveedor de identidad para verificar la solicitud de SAML firmada y cifrar la respuesta.
  3. Proporcione los datos a su proveedor de identidad. Si el proveedor de identidad permite cargar el archivo de metadatos, puede hacerlo. Si no lo permite, configure las propiedades manualmente. No todos los proveedores de identidad utilizan las mismas propiedades, por lo que es posible que no las utilice todas.

    Los nombres de propiedades pueden diferir entre los proveedores de identidad.

  4. Cambie SAML 2.0 Federation a Habilitado.

Suministro de metadatos a App ID

Obtenga datos del proveedor de identidad y proporciónelos a App ID. Puede iniciar la sesión en las aplicaciones desde IBM Cloud o desde el proveedor de identidad.

Proporcionar metadatos en la consola

Para iniciar sesión en las aplicaciones desde la interfaz de usuario de IBM Cloud, siga estos pasos.

  1. Vaya al separador SAML 2.0 del panel de control de App ID.

  2. Añada el Nombre de proveedor. El nombre predeterminado es SAML.

  3. Entre los metadatos siguientes que ha obtenido del proveedor de identidad en la sección Proporcionar metadatos de IdP SAML.

    La información que debe proporcionarse a App ID
    Variable Descripción
    Sign-in URL El URL al que se redirige el usuario para su autenticación. Se aloja mediante el proveedor de identidad SAML.
    Entity ID Nombre exclusivo globalmente para un proveedor de identidad SAML.
    Primary certificate Certificado emitido por el proveedor de identidad SAML. Se utiliza para firmar y validar aserciones SAML. Todos los proveedores son distintos, pero podría descargar el certificado de firma desde el proveedor de identidad. El certificado debe estar en formato .pem.
  4. Opcional: Proporcione un Certificado secundario que se utilice si la validación de firma falla en el certificado primario. Si la clave de firma sigue siendo la misma, App ID no bloquea la autenticación de certificados caducados.

  5. Pulse Guardar.

¿Desea establecer un contexto de autenticación? Puede hacerlo a través de la API.

Configuración del inicio de sesión IdP-initiated en la consola

Opcionalmente, si desea iniciar sesión en sus aplicaciones en IBM Cloud desde la interfaz de usuario de su proveedor de identidades, puede habilitar el inicio de sesión IdP-initiated.

Siga los pasos 1 - 4 de la sección Proporcionar metadatos en la consola. A continuación, completa el siguiente proceso.

  1. Habilite el inicio de sesión iniciado porIdP.
  2. Introduzca la redirección IdP URL.
  3. Pulse Guardar.

Proporcionar metadatos con la API

  1. Para ver la configuración actual de SAML, incluidos el contexto de autenticación y los certificados, realice una solicitud GET al punto final de la API /saml.

    Código de ejemplo:

    curl --request GET \
    https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/config/idps/saml \
    --header `Accept: application/json`
    

    Salida de ejemplo:

    {
       "isActive": true,
       "config": {
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
          "certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       "authnContext": {
          "class": [
             "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"
          ],
          "comparison": "exact"
       }
       }
    }
    
  2. Cree la configuración de SAML sustituyendo los valores del ejemplo siguiente por la información de su proveedor. Los valores que se muestran en el ejemplo son necesarios, pero puede elegir incluir más información como se muestra en la tabla.

    "config": {
       "authnContext": {
       "class": [
          "urn:oasis:names:tc:SAML:2.0:ac:classes:YourChosenClassValue",
          "urn:oasis:names:tc:SAML:2.0:ac:classes:YourOtherChosenClassValue"
       ],
       "comparison": "sampleComparisonValue"}
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
       "primary-certificate-example-pem-format"
       "secondary-certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       "signRequest": true ,
       "encryptResponse": true
    }
    
    SAML variables de configuración
    Variable Descripción
    signInUrl El URL al que se redirige el usuario para su autenticación. Se aloja mediante el proveedor de identidad SAML.
    entityID Nombre exclusivo globalmente para un proveedor de identidad SAML.
    displayName El nombre que asigna a la configuración de SAML.
    primary-certificate-example-pem-format El certificado emitido por el proveedor de identidad de SAML. Se utiliza para firmar y validar aserciones SAML. Todos los proveedores son distintos, pero podría descargar el certificado de firma desde el proveedor de identidad. El certificado debe estar en formato .pem.
    Opcional:secondary-certificate-example-pem-format El certificado de copia de seguridad que emite el proveedor de identidad SAML. Se utiliza si la validación de firma falla con el certificado primario. Nota: Si la clave de firma sigue siendo la misma, App ID no bloquea la autenticación de certificados caducados.
    Opcional:authnContext El contexto de autenticación se utiliza para verificar la calidad de la autenticación y de las aserciones SAML. Puede añadir un contexto de autenticación añadiendo una matriz de clase y una serie de comparación al código. ASEGÚRESE de actualizar los parámetros class y comparison con sus valores. Por ejemplo, el parámetro class podría ser algo como urn:oasis:names:tc:SAML:2.0:ac:classes:YourChosenClassValue.
    Opcional:signRequest El distintivo signRequest ofrece la posibilidad de enviar una solicitud de SAML firmada a un proveedor de identidad que se ha firmado utilizando la clave privada de firma de SAML del arrendatario. Para configurar el proveedor de identidad SAML para que reciba una solicitud firmada, necesita el certificado de firma del archivo de metadatos que puede descargar en el campo KeyDescriptor use="signing". De forma predeterminada, la solicitud de firma está establecida en off.
    Opcional:encryptResponse El distintivo encryptResponse le permite recibir una respuesta cifrada de su proveedor de identidad como parte de la solicitud de autenticación. Para configurar el proveedor de identidad de SAML para que envíe una respuesta cifrada, necesita el certificado de cifrado que puede encontrar en el archivo de metadatos, en el campo KeyDescriptor use="encryption". De forma predeterminada, el cifrado de respuesta está establecido en off.
  3. Realice una solicitud PUT al punto final de la API /saml para proporcionar la configuración que creó en el paso 2 a App ID. Consulte el ejemplo siguiente ver cómo podría ser su solicitud.

    curl --request PUT \
    https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/config/idps/saml \
    --header `Accept: application/json` \
    --data \
    {
       "isActive": true,
       "config": {
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
          "primary-certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       }
    }
    

Configuración del inicio de sesión IdP-initiated con la API

Para configurar el inicio de sesión en IdP-initiated, siga estos pasos.

  1. Para ver la configuración actual de SAML, incluidos el contexto de autenticación y los certificados, realice una solicitud GET al punto final de la API /saml.

    Código de ejemplo:

    curl --request GET \
    https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/config/idps/saml \
    --header `Accept: application/json`
    

    Salida de ejemplo:

    {
       "isActive": true,
       "config": {
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
          "certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       "authnContext": {
          "class": [
             "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"
          ],
          "comparison": "exact"
       }
       }
    }
    
  2. Cree la configuración de SAML sustituyendo los valores del ejemplo siguiente por la información de su proveedor. Los valores que se muestran en el ejemplo son necesarios, pero puede elegir incluir más información como se muestra en la tabla.

    "config": {
       "authnContext": {
       "class": [
          "urn:oasis:names:tc:SAML:2.0:ac:classes:YourChosenClassValue",
          "urn:oasis:names:tc:SAML:2.0:ac:classes:YourOtherChosenClassValue"
       ],
       "comparison": "sampleComparisonValue"
       },
       "idpInitEnabled": true,
       "idpRedirectUrl": "https://example.com/redirect/endpoint",
       "entityID": "https://example.com/saml2/metadata/706634",
       "signInUrl": "https://example.com/saml2/sso-redirect/706634",
       "certificates": [
       "primary-certificate-example-pem-format"
       "secondary-certificate-example-pem-format"
       ],
       "displayName": "my saml example",
       "signRequest": true ,
       "encryptResponse": true
    }
    
    SAML variables de configuración
    Variable Descripción
    signInUrl El URL al que se redirige el usuario para su autenticación. Se aloja mediante el proveedor de identidad SAML.
    entityID Nombre exclusivo globalmente para un proveedor de identidad SAML.
    displayName El nombre que asigna a la configuración de SAML.
    primary-certificate-example-pem-format El certificado emitido por el proveedor de identidad de SAML. Se utiliza para firmar y validar aserciones SAML. Todos los proveedores son distintos, pero podría descargar el certificado de firma desde el proveedor de identidad. El certificado debe estar en formato .pem.
    DefaultRelayState El valor inicial para RelayState. Esta variable se configura en los valores del proveedor de identidades. Esta variable se puede utilizar para la redirección URL en lugar de idpRedirectUrl durante las solicitudes SAML de su proveedor de identidad. Si establece ambas variables, el valor de DefaultRelayState tiene prioridad. IdP-initiated el inicio de sesión falla si no se establece una de estas variables.
    idpInitEnabled Un valor booleano para indicar si desea habilitar el inicio de sesión iniciado por IdP.
    idpRedirectUrl El valor de este campo puede ser null, una cadena vacía o una redirección http o https válida URL. Nota: Si el valor de este campo es nulo, deberá establecer DefaultRelayState como redirección URL. Si establece ambas variables, el valor de DefaultRelayState tiene prioridad. IdP-initiated el inicio de sesión falla si no se establece una de estas variables.
    Opcional:secondary-certificate-example-pem-format El certificado de copia de seguridad que emite el proveedor de identidad SAML. Se utiliza si la validación de firma falla con el certificado primario. Nota: Si la clave de firma sigue siendo la misma, App ID no bloquea la autenticación de certificados caducados.
    Opcional:authnContext El contexto de autenticación se utiliza para verificar la calidad de la autenticación y de las aserciones SAML. Puede añadir un contexto de autenticación añadiendo una matriz de clase y una serie de comparación al código. ASEGÚRESE de actualizar los parámetros class y comparison con sus valores. Por ejemplo, el parámetro class podría ser algo como urn:oasis:names:tc:SAML:2.0:ac:classes:YourChosenClassValue.
    Opcional:signRequest El distintivo signRequest ofrece la posibilidad de enviar una solicitud de SAML firmada a un proveedor de identidad que se ha firmado utilizando la clave privada de firma de SAML del arrendatario. Para configurar el proveedor de identidad SAML para que reciba una solicitud firmada, necesita el certificado de firma del archivo de metadatos que puede descargar en el campo KeyDescriptor use="signing". De forma predeterminada, la solicitud de firma está establecida en off.
    Opcional:encryptResponse El distintivo encryptResponse le permite recibir una respuesta cifrada de su proveedor de identidad como parte de la solicitud de autenticación. Para configurar el proveedor de identidad de SAML para que envíe una respuesta cifrada, necesita el certificado de cifrado que puede encontrar en el archivo de metadatos, en el campo KeyDescriptor use="encryption". De forma predeterminada, el cifrado de respuesta está establecido en off.
  3. Realice una solicitud PUT al punto final de la API /saml para proporcionar la configuración que creó en el paso 2 a App ID. Consulte el ejemplo siguiente ver cómo podría ser su solicitud.

    curl --request PUT \
    https://us-south.appid.cloud.ibm.com/management/v4/<tenantID>/config/idps/saml \
    --header `Accept: application/json` \
    --data \
       {
         "isActive": true,
         "config": {
             "entityID": "https://example.com/saml2/metadata/706634",
             "signInUrl": "https://example.com/saml2/sso-redirect/706634",
             "certificates": [
             "certificate-example-pem-format"
             ],
             "displayName": "my saml example",
             "authnContext": {
                 "class": [
                     "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"
                 ],
             "comparison": "exact"
             },
             "idpInitEnabled": true,
             "idpRedirectUrl": "https://example.com/redirect/endpoint",
         }
    }
    

Prueba de la configuración

Puede probar la configuración entre el proveedor de identidad SAML y App ID.

  1. Asegúrese de que ha guardado la configuración.
  2. Vaya al separador SAML 2.0 del panel de control de App ID y pulse Probar. Se abre un nuevo separador.
  3. Inicie la sesión con un usuario que el proveedor de identidades ya ha autenticado.
  4. Después de completar el formulario, se le redirigirá a otra página.
    • Autenticación correcta: La conexión entre App ID y el proveedor de identidad funciona correctamente. La página muestra señales de acceso y de identidad válidas.
    • Error de autenticación: La conexión se ha bloqueado. La página muestra los errores y el archivo XML de la respuesta SAML.

La infraestructura SAML da soporte a varios perfiles, flujos y configuraciones, lo que significa que el proveedor de identidades debe estar configurado correctamente. Si se encuentra con problemas, consulte algunas razones comunes por las que su solicitud de autenticación podría fallar o revise la especificación SAML para obtener códigos de error detallados.