Compartir a través de


Opciones para registrar una aplicación SAML en Azure AD B2C

Importante

A partir del 1 de mayo de 2025, Azure AD B2C ya no estará disponible para ser adquirido por nuevos clientes. Obtenga más información en nuestras preguntas más frecuentes.

En este artículo se describen las opciones de configuración disponibles al conectar Azure Active Directory B2C (Azure AD B2C) con la aplicación lenguaje de marcado de aserción de seguridad (SAML).

Antes de empezar, use el selector Elegir un tipo de directiva en la parte superior de esta página para elegir el tipo de directiva que está configurando. Azure Active Directory B2C ofrece dos métodos para definir cómo interactúan los usuarios con las aplicaciones: a través de flujos de usuario predefinidos o mediante directivas personalizadas totalmente configurables. Los pasos necesarios en este artículo son diferentes para cada método.

Esta característica está disponible solo para directivas personalizadas. Para conocer los pasos de configuración, seleccione Directiva personalizada en el selector anterior.

Especificación de una firma de respuesta SAML

Puede especificar un certificado que se usará para firmar los mensajes SAML. El mensaje es el <samlp:Response> elemento dentro de la respuesta SAML enviada a la aplicación.

Si aún no tiene una clave de directiva, cree una. A continuación, configure el SamlMessageSigning elemento de metadatos en el perfil técnico del emisor de tokens SAML. StorageReferenceId debe hacer referencia al nombre de la clave de directiva.

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <!-- SAML Token Issuer technical profile -->
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
        ...
      <CryptographicKeys>
        <Key Id="SamlMessageSigning" StorageReferenceId="B2C_1A_SamlMessageCert"/>
        ...
      </CryptographicKeys>
    ...
    </TechnicalProfile>

Algoritmo de firma

Puede configurar el algoritmo de firma que se usa para firmar la aserción de SAML. Los valores posibles son Sha256, Sha384, Sha512, o Sha1. Asegúrese de que el perfil técnico y la aplicación usan el mismo algoritmo de firma. Use solo el algoritmo que admite el certificado.

Configure el algoritmo de firma mediante la clave de metadatos XmlSignatureAlgorithm dentro del elemento de usuario de confianzaMetadata.

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="XmlSignatureAlgorithm">Sha256</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

Comprobación de la firma de aserción SAML

Cuando la aplicación espera que se firme la sección de aserción de SAML, asegúrese de que el proveedor de servicios SAML establezca el WantAssertionsSigned en true. Si está configurado en false o no existe, la sección de aserción no se firmará.

En el ejemplo siguiente se muestran los metadatos de un proveedor de servicios SAML, con WantAssertionsSigned establecido en true.

<EntityDescriptor ID="id123456789" entityID="https://samltestapp2.azurewebsites.net" validUntil="2099-12-31T23:59:59Z" xmlns="urn:oasis:names:tc:SAML:2.0:metadata">
  <SPSSODescriptor WantAssertionsSigned="true" AuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
  ...
  </SPSSODescriptor>
</EntityDescriptor>

Certificado de firma

La directiva debe especificar un certificado que se usará para firmar la sección aserciones de SAML de la respuesta de SAML. Si aún no tiene una clave de directiva, cree una. A continuación, configure el SamlAssertionSigning elemento de metadatos en el perfil técnico del emisor de tokens SAML. StorageReferenceId debe hacer referencia al nombre de la clave de directiva.

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <!-- SAML Token Issuer technical profile -->
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
        ...
      <CryptographicKeys>
        <Key Id="SamlAssertionSigning" StorageReferenceId="B2C_1A_SamlMessageCert"/>
        ...
      </CryptographicKeys>
    ...
    </TechnicalProfile>

Habilitación del cifrado en aserciones de SAML

Cuando la aplicación espera que las aserciones de SAML estén en un formato cifrado, asegúrese de que el cifrado está habilitado en la directiva de Azure AD B2C.

Azure AD B2C usa el certificado de clave pública del proveedor de servicios para cifrar la aserción de SAML. La clave pública debe existir en el punto de conexión de metadatos de la aplicación SAML con el valor KeyDescriptor establecido en useEncryption, como se muestra en el ejemplo siguiente.

<KeyDescriptor use="encryption">
  <KeyInfo xmlns="https://www.w3.org/2000/09/xmldsig#">
    <X509Data>
      <X509Certificate>valid certificate</X509Certificate>
    </X509Data>
  </KeyInfo>
</KeyDescriptor>

Para permitir que Azure AD B2C envíe aserciones cifradas, establezca el WantsEncryptedAssertionelemento de metadatos del true en el perfil técnico del usuario de confianza. También puede configurar el algoritmo que se usa para cifrar la aserción de SAML.

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="WantsEncryptedAssertions">true</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

Método de cifrado

Para configurar el método de cifrado que se usa para cifrar los datos de aserción de SAML, establezca la clave de metadatos DataEncryptionMethod dentro del usuario de confianza. Los valores posibles son Aes256 (valor predeterminado), Aes192, Sha512o Aes128. Los metadatos controlan el valor del elemento <EncryptedData> en la respuesta de SAML.

Para configurar el método de cifrado para cifrar la copia de la clave que se utilizó para cifrar los datos de aserción de SAML, establezca la clave de metadatos KeyEncryptionMethod dentro de la parte confiable. Los valores posibles son:

  • Rsa15 (valor predeterminado): algoritmo RSA Public Key Cryptography Standard (PKCS) Versión 1.5.
  • RsaOaep: algoritmo de cifrado Optimal Asymmetric Encryption Padding (OAEP) de RSA.

Los metadatos controlan el valor del elemento <EncryptedKey> en la respuesta de SAML.

En el ejemplo siguiente se muestra la EncryptedAssertion sección de una aserción de SAML. El método de datos cifrado es Aes128y el método de clave cifrada es Rsa15.

<saml:EncryptedAssertion>
  <xenc:EncryptedData xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"
    xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" Type="http://www.w3.org/2001/04/xmlenc#Element">
    <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc" />
    <dsig:KeyInfo>
      <xenc:EncryptedKey>
        <xenc:EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
        <xenc:CipherData>
          <xenc:CipherValue>...</xenc:CipherValue>
        </xenc:CipherData>
      </xenc:EncryptedKey>
    </dsig:KeyInfo>
    <xenc:CipherData>
      <xenc:CipherValue>...</xenc:CipherValue>
    </xenc:CipherData>
  </xenc:EncryptedData>
</saml:EncryptedAssertion>

Puede cambiar el formato de las aserciones cifradas. Para configurar el formato de cifrado, establezca la clave de metadatos UseDetachedKeys dentro del usuario de confianza. Valores posibles: true o false (valor predeterminado). Cuando el valor se establece en true, las claves desasociadas agregan la aserción cifrada como elemento secundario de EncryptedAssertion en lugar de EncryptedData.

Configure el método de cifrado y el formato mediante las claves de metadatos dentro del perfil técnico del usuario de confianza:

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="DataEncryptionMethod">Aes128</Item>
      <Item Key="KeyEncryptionMethod">Rsa15</Item>
      <Item Key="UseDetachedKeys">false</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

Configuración del flujo iniciado por IdP

Cuando la aplicación espera recibir una aserción de SAML sin enviar primero una solicitud de autenticación de SAML al proveedor de identidades (IdP), debe configurar Azure AD B2C para el flujo iniciado por IdP.

En el flujo iniciado por IdP, el proveedor de identidades (Azure AD B2C) inicia el proceso de inicio de sesión. El proveedor de identidades envía una respuesta SAML no solicitada al proveedor de servicios (la aplicación de usuario de confianza).

Actualmente no se admiten escenarios en los que el proveedor de identidades inicial es un proveedor de identidades externo federado con Azure AD B2C, como Servicios de federación de Active Directory o Salesforce. El flujo iniciado por IdP solo se admite para la autenticación de cuentas locales en Azure AD B2C.

Para habilitar el flujo iniciado por IdP, establezca el IdpInitiatedProfileEnabledelemento de metadatos del true en el perfil técnico del usuario de confianza.

<RelyingParty>
  <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
  <TechnicalProfile Id="PolicyProfile">
    <DisplayName>PolicyProfile</DisplayName>
    <Protocol Name="SAML2"/>
    <Metadata>
      <Item Key="IdpInitiatedProfileEnabled">true</Item>
    </Metadata>
   ..
  </TechnicalProfile>
</RelyingParty>

Para iniciar sesión o registrar a un usuario a través del flujo iniciado por IdP, use la siguiente dirección URL:

https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/generic/login?EntityId=<app-identifier-uri>&RelayState=<relay-state> 

Reemplace los siguientes valores:

  • Remplace <tenant-name> por el nombre del inquilino.
  • Reemplace <policy-name> por el nombre de la directiva de usuario de confianza de SAML.
  • Reemplace <app-identifier-uri> por el identifierUris valor del archivo de metadatos, como https://contoso.onmicrosoft.com/app-name.
  • [Opcional] reemplace <relay-state> con un valor incluido en la solicitud de autorización que también se devuelve en la respuesta del token. El relay-state parámetro se usa para codificar información sobre el estado del usuario en la aplicación antes de que se produjera la solicitud de autenticación, como la página en la que estaban.

Directiva de ejemplo

Puede usar una directiva de ejemplo completa para realizar pruebas con la aplicación de prueba de SAML:

  1. Descargue la política de ejemplo de inicio de sesión iniciado por SAML-SP.
  2. Actualice TenantId para que coincida con el nombre del inquilino. En este artículo se usa el ejemplo contoso.b2clogin.com.
  3. Mantenga el nombre de la directiva B2C_1A_signup_signin_saml.

Configuración de la duración de la respuesta SAML

Puede configurar el período de tiempo durante el que la respuesta SAML sigue siendo válida. Establezca la duración mediante el TokenLifeTimeInSeconds elemento de metadatos dentro del perfil técnico del emisor de tokens SAML. Este valor es el número de segundos que pueden transcurrir desde la NotBefore marca de tiempo, calculada al momento de emisión del token. La duración predeterminada es de 300 segundos (cinco minutos).

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
      <Metadata>
        <Item Key="TokenLifeTimeInSeconds">400</Item>
      </Metadata>
      ...
    </TechnicalProfile>

Configuración de la asimetría de hora de una respuesta SAML

Puede configurar la asimetría de tiempo aplicada a la respuesta de SAML NotBefore marca de tiempo. Esta configuración garantiza que, si los tiempos entre dos plataformas no están sincronizados, la aserción de SAML se seguirá considerando válida cuando esté dentro de esta asimetría de tiempo.

Establezca la asimetría de hora mediante el TokenNotBeforeSkewInSeconds elemento de metadatos dentro del perfil técnico del emisor de tokens SAML. El valor de asimetría se da en segundos, con un valor predeterminado de 0. El valor máximo es 3600 (una hora).

Por ejemplo, cuando TokenNotBeforeSkewInSeconds se establece en 120 segundos:

  • El token se emite a las 13:05:10 UTC.
  • El token es válido a partir de las 13:03:10 UTC.
<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
      <Metadata>
        <Item Key="TokenNotBeforeSkewInSeconds">120</Item>
      </Metadata>
      ...
    </TechnicalProfile>

Quitar milisegundos de la fecha y hora

Puede especificar si se quitarán milisegundos de los valores de fecha y hora dentro de la respuesta SAML. (Estos valores incluyen IssueInstant, NotBefore, NotOnOrAfter, y AuthnInstant). Para quitar los milisegundos, establezca la clave de metadatos RemoveMillisecondsFromDateTime en la parte confiable. Valores posibles: false (predeterminado) o true.

  <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="SAML2" />
      <Metadata>
        <Item Key="RemoveMillisecondsFromDateTime">true</Item>
      </Metadata>
      <OutputClaims>
             ...
      </OutputClaims>
      <SubjectNamingInfo ClaimType="objectId" ExcludeAsClaim="true" />
    </TechnicalProfile>
  </RelyingParty>

Uso de un identificador de emisor para invalidar un URI del emisor

Si tiene varias aplicaciones SAML que dependen de valores de entityID diferentes, puede invalidar el valor de IssuerUri en el archivo de usuario de confianza. Para sobrescribir el URI del emisor, copie el perfil técnico con el identificador Saml2AssertionIssuer del archivo base y sobrescriba el valor IssuerUri.

Sugerencia

Copie la <ClaimsProviders> sección de la base y conserve estos elementos dentro del proveedor de declaraciones: <DisplayName>Token Issuer</DisplayName>, <TechnicalProfile Id="Saml2AssertionIssuer"> y <DisplayName>Token Issuer</DisplayName>.

Ejemplo:

   <ClaimsProviders>   
    <ClaimsProvider>
      <DisplayName>Token Issuer</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Saml2AssertionIssuer">
          <DisplayName>Token Issuer</DisplayName>
          <Metadata>
            <Item Key="IssuerUri">customURI</Item>
          </Metadata>
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
  </ClaimsProviders>
  <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpInSAML" />
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="SAML2" />
      <Metadata>
     …

Administración de una sesión

Puede gestionar la sesión entre Azure AD B2C y la aplicación que confía en SAML utilizando el elemento UseTechnicalProfileForSessionManagement y el SamlSSOSessionProvider.

Forzar a los usuarios a volver a autenticar

Para obligar a los usuarios a volver a autenticarse, la aplicación puede incluir el ForceAuthn atributo en la solicitud de autenticación SAML. El ForceAuthn atributo es un valor booleano. Cuando se establece en true, la sesión del usuario se invalidará en Azure AD B2C y el usuario estará obligado a volver a autenticarse.

La siguiente solicitud de autenticación SAML muestra cómo establecer el atributo ForceAuthn a true.

<samlp:AuthnRequest 
       Destination="https://contoso.b2clogin.com/contoso.onmicrosoft.com/B2C_1A_SAML2_signup_signin/samlp/sso/login"
       ForceAuthn="true" ...>
    ...
</samlp:AuthnRequest>

Firmar los metadatos de SAML de IdP de Azure AD B2C

Puede indicar a Azure AD B2C que firme su documento de metadatos para el proveedor de identidades SAML, si la aplicación lo requiere. Si aún no tiene una clave de directiva, cree una. A continuación, configure el MetadataSigning elemento de metadatos en el perfil técnico del emisor de tokens SAML. StorageReferenceId debe hacer referencia al nombre de la clave de directiva.

<ClaimsProvider>
  <DisplayName>Token Issuer</DisplayName>
  <TechnicalProfiles>
    <!-- SAML Token Issuer technical profile -->
    <TechnicalProfile Id="Saml2AssertionIssuer">
      <DisplayName>Token Issuer</DisplayName>
      <Protocol Name="SAML2"/>
      <OutputTokenFormat>SAML2</OutputTokenFormat>
        ...
      <CryptographicKeys>
        <Key Id="MetadataSigning" StorageReferenceId="B2C_1A_SamlMetadataCert"/>
        ...
      </CryptographicKeys>
    ...
    </TechnicalProfile>

Depuración del protocolo SAML

Para ayudar a configurar y depurar la integración con el proveedor de servicios, puede usar una extensión del explorador para el protocolo SAML. Las extensiones del explorador incluyen la extensión SAML DevTools para Chrome, SAML-tracer para Firefox y herramientas de desarrollo para Edge o Internet Explorer.

Mediante estas herramientas, puede comprobar la integración entre la aplicación y Azure AD B2C. Por ejemplo:

  • Compruebe si la solicitud SAML contiene una firma y determine qué algoritmo se usa para iniciar sesión en la solicitud de autorización.
  • Compruebe si Azure AD B2C devuelve un mensaje de error.
  • Compruebe si la sección de aserción está cifrada.

Pasos siguientes