Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Permitir que los usuarios accedan con SAML

En este documento, se muestra cómo usar Identity Platform para que los usuarios accedan con un proveedor del lenguaje de marcado para confirmaciones de seguridad (SAML) 2.0.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir a la página del selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

  4. Habilita Identity Platform y agrega el SDK de cliente a tu app. Consulta la Guía de inicio rápido para aprender a hacerlo.

Configura el proveedor

  1. Ve a la página Proveedores de identidad en Cloud Console.
    Ir a la página de proveedores de identidad

  2. Haz clic en Agregar un proveedor y selecciona SAML de la lista.

  3. Ingresa los siguientes detalles:

    1. El Nombre del proveedor. Puede ser el mismo que el ID del proveedor o un nombre personalizado. Si ingresas un nombre personalizado, haz clic en Editar junto a ID del proveedor para especificar el ID (que debe comenzar con saml.).

    2. El ID de la entidad del proveedor.

    3. La URL de SSO de SAML del proveedor.

    4. El certificado que se usa para la firma de tokens en el proveedor. Asegúrate de incluir las strings de inicio y finalización. Por ejemplo:

      -----BEGIN CERTIFICATE-----
      MIICajCCAdOgAwIBAgIBADANBgkqhkiG9w0BAQ0FADBSMQswCQYDVQQGEwJ1czEL
      ...
      LEzc1JwEGQQVDYQCwsQMSBDAF0QAB0w9GikhqkgBNADABIgABIwAgOdACCjaCIIM
      -----END CERTIFICATE-----
      
  4. En Proveedor de servicios, ingresa el ID de entidad de tu app. Por lo general, es la URL de tu app. En tu proveedor de identidad de SAML, esto se conoce como el público.

  5. Agrega tu app a la lista de Dominios autorizados. Por ejemplo, si la URL de acceso de tu app es https://example.com/login, agrega example.com.

  6. Si es necesario, personaliza la URL de devolución de llamada de la app. Normalmente, los proveedores de identidad de SAML suelen llamarla URL del servicio de confirmación de consumidores (ACS).

    El uso de la URL de devolución de llamada predeterminada reduce la complejidad de validar la respuesta de SAML. Si personalizas este flujo, asegúrate de que la URL de devolución de llamada de Identity Platform para tu proyecto esté configurada en tu proveedor de identidad de SAML. Por lo general, se parece a https://<authDomain>/__/auth/handler. Consulta Personaliza un controlador de autenticación para obtener más información.

  7. Haga clic en Save.

Solicitudes de firmas

Puedes aumentar la seguridad de las solicitudes de autenticación si las firmas.

Para firmar solicitudes, primero habilita las solicitudes firmadas de tu proveedor de identidad. Para ello, llama a inboundSamlConfigs.patch() y establece idp_config.sign_request en true:

REST

Método HTTP y URL:

PATCH https://identitytoolkit.googleapis.com/admin/v2/projects/project-id/inboundSamlConfigs/provider-id?updateMask=idpConfig.signRequest

Cuerpo JSON de la solicitud:

{
  "idp_config": {
    "sign_request": true
  }
}

Para enviar tu solicitud, expande una de estas opciones:

 

Debes usar la API de REST para habilitar las solicitudes firmadas. No se admite el uso de Cloud Console o la herramienta de línea de comandos de gcloud.

La respuesta es un objeto InboundSamlConfig, que incluye un arreglo de SpCertificate. Configura el valor del certificado X509 con tu proveedor de identidad SAML para que pueda validar la firma de tus solicitudes.

Usuarios que acceden

Cuando un usuario accede, el SDK de cliente controla el protocolo de enlace de la autenticación y, luego, muestra los tokens de ID que contienen los atributos de SAML en sus cargas útiles. Para que un usuario acceda y obtenga atributos del proveedor de SAML, haz lo siguiente:

  1. Crea una instancia SAMLAuthProvider con el ID del proveedor que configuraste en la sección anterior. El ID del proveedor debe comenzar con saml..

    const provider = new firebase.auth.SAMLAuthProvider('saml.myProvider');
    
  2. Inicia el flujo de acceso. Puedes elegir usar una ventana emergente o un redireccionamiento.

    Para mostrar una ventana emergente, llama a signInWithPopup():

    firebase.auth().signInWithPopup(provider)
      .then((result) => {
        // User is signed in.
        // Identity provider data available in result.additionalUserInfo.profile,
        // or from the user's ID token obtained from result.user.getIdToken()
        // as an object in the firebase.sign_in_attributes custom claim
        // This is also available from result.user.getIdTokenResult()
        // idTokenResult.claims.firebase.sign_in_attributes.
      })
      .catch((error) => {
        // Handle error.
      });
    

    Redirect

    Para redireccionar a una página de acceso, llama a signInWithRedirect():

    firebase.auth().signInWithRedirect(provider);
    

    Luego, llama a getRedirectResult() para obtener los resultados cuando el usuario regrese a tu app:

    firebase.auth().getRedirectResult()
      .then((result) => {
        // User is signed in.
        // Provider data available in result.additionalUserInfo.profile,
        // or from the user's ID token obtained from result.user.getIdToken()
        // as an object in the firebase.sign_in_attributes custom claim
        // This is also available from result.user.getIdTokenResult()
        // idTokenResult.claims.firebase.sign_in_attributes.
      }).catch((error) => {
        // Handle error.
      });
    
  3. Recupera los atributos de usuario asociados con el proveedor de SAML del token de ID con la reclamación firebase.sign_in_attributes. Asegúrate de verificar el token de ID con el SDK de Admin cuando lo envíes a tu servidor.

Actualmente, solo se admiten flujos de SAML iniciados por el proveedor de servicios desde el SDK de cliente.

Vincula cuentas de usuario

Si un usuario ya accedió a su aplicación con un método diferente (como correo electrónico/contraseña), puedes vincular su cuenta existente con el proveedor de SAML mediante linkWithPopup() o linkWithRedirect(). Por ejemplo:

const provider = new firebase.auth.SAMLAuthProvider('saml.myProvider');

// Link with a popup.
firebase.auth().currentUser.linkWithPopup(provider)
    // currentUser.providerData now has an additional entry for this provider.
  }).catch((error) => {
    // Handle error.
  });

Vuelve a autenticar usuarios

Algunas operaciones sensibles, como la actualización del correo electrónico o la contraseña de un usuario, requieren que el usuario haya accedido recientemente. Para permitir que un usuario vuelva a acceder, llama a reauthenticateWithPopup() o a reauthenticateWithRedirect(). Por ejemplo:

const provider = new firebase.auth.SAMLAuthProvider('saml.myProvider');

// Reauthenticate with a popup.
firebase.auth().currentUser.reauthenticateWithPopup(provider)
  .then((result) => {
    // Get the updated ID token.
    return result.user.getIdTokenResult();
  })
  .then((idTokenResult) => {
    // idTokenResult.authTime should be updated to reflect recent sign-in status.
    // idTokenResult.token has the latest ID token.
  })
  .catch((error) => {
    // Handle error.
  });

¿Qué sigue?