Incorporación de AD FS como proveedor de identidades de SAML mediante las directivas personalizadas de Azure Active Directory B2C

Antes de comenzar, use el selector Elección de un tipo de directiva para elegir el tipo de directiva que va a configurar. Azure Active Directory B2C ofrece dos métodos para definir el modo en que los usuarios interactúan con las aplicaciones: por medio de flujos de usuario predefinidos o de 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. En los pasos de configuración, elija Directiva personalizada en el selector anterior.

Nota:

En Azure Active Directory B2C, las directivas personalizadas se han diseñado principalmente para abordar escenarios complejos. Para la mayoría de los escenarios, se recomienda usar flujos de usuario integrados. Si no lo ha hecho, obtenga información sobre el paquete de inicio de directivas personalizadas en Introducción a las directivas personalizadas en Active Directory B2C.

En este artículo se muestra cómo habilitar el inicio de sesión para una cuenta de usuario de AD FS mediante directivas personalizadas en Azure Active Directory B2C (Azure AD B2C). Para habilitar el inicio de sesión, agregue un proveedor de identidades de SAML a una directiva personalizada.

Prerrequisitos

Crear un certificado autofirmado

Si aún no tiene un certificado, puede usar un certificado autofirmado para este tutorial. Un certificado autofirmado es un certificado de seguridad que no está firmado por una entidad de certificación (CA) y no proporciona las garantías de seguridad de un certificado firmado por una CA.

En Windows, use el cmdlet New-SelfSignedCertificate de PowerShell para generar un certificado.

  1. Ejecute este comando de PowerShell para generar un certificado autofirmado. Modifique el argumento -Subject según corresponda para su aplicación y el nombre del inquilino de Azure AD B2C, por ejemplo contosowebapp.contoso.onmicrosoft.com. También puede ajustar la fecha de -NotAfter para especificar una expiración diferente para el certificado.

    New-SelfSignedCertificate `
        -KeyExportPolicy Exportable `
        -Subject "CN=yourappname.yourtenant.onmicrosoft.com" `
        -KeyAlgorithm RSA `
        -KeyLength 2048 `
        -KeyUsage DigitalSignature `
        -NotAfter (Get-Date).AddMonths(12) `
        -CertStoreLocation "Cert:\CurrentUser\My"
    
  2. En el equipo Windows, busque y seleccione Administrar certificados de usuario.

  3. En Certificados: usuario actual, seleccione Personal>Certificados>yourappname.yourtenant.onmicrosoft.com.

  4. Seleccione el certificado y, a continuación, seleccione Acción>Todas las tareas>Exportar.

  5. Seleccione Siguiente>Exportar la clave privada>Siguiente.

  6. Acepte los valores predeterminados de Formato de archivo de exportación y, luego, seleccione Siguiente.

  7. Habilite la opción Contraseña, escriba una contraseña para el certificado y, luego, elija Siguiente.

  8. Para especificar una ubicación para guardar el certificado, seleccione Examinar y vaya al directorio que prefiera.

  9. En la ventana Guardar como, escriba un nombre de archivo y, luego, elija Guardar.

  10. Seleccione Siguiente>Finalizar.

Para que Azure AD B2C acepte la contraseña del archivo .pfx, debe estar cifrada con la opción TripleDES-SHA1 de la utilidad de exportación del almacén de certificados de Windows en lugar de con AES256-SHA256.

Creación de una clave de directiva

Debe almacenar el certificado en el inquilino de Azure AD B2C.

  1. Inicie sesión en Azure Portal.
  2. Si tiene acceso a varios inquilinos, seleccione el icono Configuración en el menú superior para cambiar a su inquilino de Azure AD B2C desde el menú Directorios y suscripciones.
  3. Elija Todos los servicios en la esquina superior izquierda de Azure Portal, y busque y seleccione Azure AD B2C.
  4. En la página de introducción, seleccione Identity Experience Framework.
  5. Seleccione Claves de directiva y luego Agregar.
  6. En Opciones, elija Upload.
  7. Escriba un nombre para la clave de directiva. Por ejemplo, SAMLSigningCert. Se agregará el prefijo B2C_1A_ automáticamente al nombre de la clave.
  8. Busque el archivo .pfx de certificado con la clave privada y selecciónelo.
  9. Haga clic en Crear.

Incorporación de un proveedor de notificaciones

Si quiere que los usuarios inicien sesión con una cuenta de AD FS, deberá definirla como proveedor de notificaciones con el que Azure AD B2C pueda comunicarse mediante un punto de conexión. El punto de conexión proporciona un conjunto de notificaciones que Azure AD B2C usa para comprobar que un usuario concreto se ha autenticado.

Puede definir una cuenta de AD FS como proveedor de notificaciones; para ello, agréguela al elemento ClaimsProvider en el archivo de extensión de la directiva. Para más información, consulte cómo definir un proveedor de identidades de SAML.

  1. Abra el archivo TrustFrameworkExtensions.xml.

  2. Busque el elemento ClaimsProviders. Si no existe, agréguelo debajo del elemento raíz.

  3. Agregue un nuevo elemento ClaimsProvider tal como se muestra a continuación:

    <ClaimsProvider>
      <Domain>contoso.com</Domain>
      <DisplayName>Contoso</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="Contoso-SAML2">
          <DisplayName>Contoso</DisplayName>
          <Description>Login with your AD FS account</Description>
          <Protocol Name="SAML2"/>
          <Metadata>
            <Item Key="WantsEncryptedAssertions">false</Item>
            <Item Key="PartnerEntity">https://your-AD-FS-domain/federationmetadata/2007-06/federationmetadata.xml</Item>
          </Metadata>
          <CryptographicKeys>
            <Key Id="SamlMessageSigning" StorageReferenceId="B2C_1A_SAMLSigningCert"/>
          </CryptographicKeys>
          <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="userPrincipalName" />
            <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="given_name"/>
            <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="family_name"/>
            <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email"/>
            <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name"/>
            <OutputClaim ClaimTypeReferenceId="identityProvider" DefaultValue="contoso.com" />
            <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication"/>
          </OutputClaims>
          <OutputClaimsTransformations>
            <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
            <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
            <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
            <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/>
          </OutputClaimsTransformations>
          <UseTechnicalProfileForSessionManagement ReferenceId="SM-Saml-idp"/>
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    
  4. Reemplace your-AD-FS-domain por el nombre de su dominio de AD FS y reemplace el valor de la notificación de salida identityProvider por su DNS (valor arbitrario que indica el dominio).

  5. Busque la sección <ClaimsProviders> y agregue el siguiente fragmento de código XML. Si la directiva ya contiene el perfil técnico SM-Saml-idp, vaya al paso siguiente. Para más información, consulte Administración de sesión de inicio de sesión único.

    <ClaimsProvider>
      <DisplayName>Session Management</DisplayName>
      <TechnicalProfiles>
        <TechnicalProfile Id="SM-Saml-idp">
          <DisplayName>Session Management Provider</DisplayName>
          <Protocol Name="Proprietary" Handler="Web.TPEngine.SSO.SamlSSOSessionProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
          <Metadata>
            <Item Key="IncludeSessionIndex">false</Item>
            <Item Key="RegisterServiceProviders">false</Item>
          </Metadata>
        </TechnicalProfile>
      </TechnicalProfiles>
    </ClaimsProvider>
    
  6. Guarde el archivo.

Adición de un recorrido del usuario

En este momento, el proveedor de identidades ya se ha configurado, pero no está disponible en ninguna de las pantallas de inicio de sesión. Si no tiene su propio recorrido del usuario personalizado, cree un duplicado de un recorrido del usuario de la plantilla existente; de lo contrario, continúe con el paso siguiente.

  1. Abra el archivo TrustFrameworkBase.xml del paquete de inicio.
  2. Busque y copie todo el contenido del elemento UserJourney que incluye Id="SignUpOrSignIn".
  3. Abra el archivo TrustFrameworkExtensions.xml y busque el elemento UserJourneys. Si el elemento no existe, agréguelo.
  4. Pegue todo el contenido del elemento UserJourney que ha copiado como elemento secundario del elemento UserJourneys.
  5. Cambie el identificador del recorrido del usuario. Por ejemplo, Id="CustomSignUpSignIn".

Adición del proveedor de identidades a un recorrido del usuario

Ahora que tiene un recorrido del usuario, agregue el nuevo proveedor de identidades al recorrido del usuario. En primer lugar, agregue un botón de inicio de sesión y, después, vincule el botón a una acción. La acción es el perfil técnico que creó anteriormente.

  1. Busque el elemento del paso de orquestación que incluye Type="CombinedSignInAndSignUp" o Type="ClaimsProviderSelection"en el recorrido del usuario. Normalmente es el primer paso de orquestación. El elemento ClaimsProviderSelections contiene una lista de proveedores de identidades con los que un usuario puede iniciar sesión. El orden de los elementos controla el orden de los botones de inicio de sesión que se presentan al usuario. Agregue un elemento XML ClaimsProviderSelection. Establezca el valor de TargetClaimsExchangeId en un nombre descriptivo.

  2. En el paso de orquestación siguiente, agregue un elemento ClaimsExchange. Establezca el Id en el valor del identificador de intercambio de notificaciones de destino. Actualice el valor de TechnicalProfileReferenceId al del identificador del perfil técnico que creó anteriormente.

En el siguiente código XML se muestran los dos primeros pasos de orquestación de un recorrido del usuario con el proveedor de identidades:

<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
  <ClaimsProviderSelections>
    ...
    <ClaimsProviderSelection TargetClaimsExchangeId="ContosoExchange" />
  </ClaimsProviderSelections>
  ...
</OrchestrationStep>

<OrchestrationStep Order="2" Type="ClaimsExchange">
  ...
  <ClaimsExchanges>
    <ClaimsExchange Id="ContosoExchange" TechnicalProfileReferenceId="Contoso-SAML2" />
  </ClaimsExchanges>
</OrchestrationStep>

Configuración de la directiva de usuario de confianza.

La directiva de usuario de confianza, por ejemplo SignUpSignIn.xml, especifica el recorrido del usuario que ejecutará Azure AD B2C. Busque el elemento DefaultUserJourney en el usuario de confianza. Actualice ReferenceId para que coincida con el identificador del recorrido del usuario, en el que agregó el proveedor de identidades.

En el ejemplo siguiente, para el recorrido de usuario CustomSignUpSignIn, el ReferenceId está establecido en CustomSignUpSignIn:

<RelyingParty>
  <DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
  ...
</RelyingParty>

Carga de la directiva personalizada

  1. Inicie sesión en Azure Portal.
  2. Seleccione el icono Directorio y suscripción en la barra de herramientas del portal y, luego, elija el directorio que contiene el inquilino de Azure AD B2C.
  3. En Azure Portal, busque y seleccione Azure AD B2C.
  4. En Directivas, seleccione Identity Experience Framework.
  5. Seleccione Cargar directiva personalizada y, a continuación, cargue los dos archivos de directivas que ha cambiado, en el siguiente orden: la directiva de extensiones, por ejemplo TrustFrameworkExtensions.xml, luego la directiva de usuarios de confianza, como SignUpSignIn.xml.

Configuración de una relación de confianza para usuario autenticado de AD FS

Para usar AD FS como proveedor de identidades en Azure AD B2C, debe crear una relación de confianza para usuario autenticado de AD FS con los metadatos de SAML de Azure AD B2C. En el ejemplo siguiente se muestra una dirección URL a los metadatos SAML de un perfil técnico de Azure AD B2C:

https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/your-policy/samlp/metadata?idptp=your-technical-profile

Cuando use un dominio personalizado, use el siguiente formato:

https://your-domain-name/your-tenant-name.onmicrosoft.com/your-policy/samlp/metadata?idptp=your-technical-profile

Reemplace los siguientes valores:

  • your-tenant-name por el nombre del inquilino, como inquilino.onmicrosoft.com.
  • your-tenant-name por el nombre del dominio personalizado, como login.contoso.com.
  • your-policy por el nombre de la directiva. Por ejemplo, B2C_1A_signup_signin_adfs.
  • your-technical-profile con el nombre de su perfil técnico del proveedor de identidades de SAML. Por ejemplo, Contoso-SAML2.

Abra un explorador y vaya a esta dirección URL. Asegúrese de escribir la dirección URL correcta y que tenga acceso al archivo XML de metadatos. Para agregar una nueva relación de confianza para usuario autenticado mediante el complemento de administración de AD FS (Servicios de federación de Active Directory) y configurar manualmente los valores, realice el procedimiento siguiente en un servidor de federación. Para realizar este procedimiento, se requiere al menos la pertenencia al grupo Administradores, o equivalente, en el equipo local.

  1. En el Administrador del servidor, seleccione Herramientas y luego Administración de AD FS.

  2. Seleccione Agregar confianza para usuario de confianza.

  3. En la página principal, elija Compatible con notificaciones y seleccione Iniciar.

  4. En la página Seleccionar origen de datos, seleccione Importar los datos sobre el usuario de confianza publicado en línea o en una red local, proporcione la dirección URL de metadatos de Azure AD B2C y luego seleccione Siguiente.

  5. En la página Especificar nombre para mostrar, escriba un nombre en Nombre para mostrar. En Notas escriba una descripción de esta relación de confianza de usuario y luego seleccione Siguiente.

  6. En Elegir directiva de control de acceso, seleccione una directiva y, luego, Siguiente.

  7. En la página Listo para agregar confianza, revise la configuración y luego seleccione Siguiente para guardar la información de la relación de confianza para usuario autenticado.

  8. En la página Finalizar, seleccione Cerrar; esta acción muestra automáticamente el cuadro de diálogo Editar reglas de notificación.

  9. Seleccione Agregar regla.

  10. En Claim rule template (Plantilla de regla de notificación), seleccione Send LDAP attributes as claims (Enviar atributos LDAP como notificaciones).

  11. Proporcione un valor en Claim rule name (Nombre de la regla de notificación). Para Almacén de atributos, seleccione Select Active Directory (Seleccionar Active Directory), agregue las siguientes notificaciones y seleccione Finalizar y luego en Aceptar.

    Atributo LDAP Tipo de notificación saliente
    User-Principal-Name userPrincipalName
    Surname family_name
    Given-Name given_name
    E-Mail-Address email
    Display-Name name

    Tenga en cuenta que algunos de los nombres no se mostrarán en la lista desplegable de tipo de notificaciones salientes. Debe escribirlos manualmente. (La lista desplegable es editable).

  12. Según el tipo de certificado, es posible que tenga que establecer el algoritmo HASH. En la ventana de propiedades de la relación de usuario de confianza (demo de B2C), haga clic en la pestaña Avanzado y cambie el valor de Algoritmo hash seguro a SHA-256 y luego seleccione Aceptar.

  13. En el Administrador del servidor, seleccione Herramientas y luego Administración de AD FS.

  14. Seleccione la relación de usuario de confianza que creó, seleccione Actualizar a partir de los metadatos de federación y luego seleccione Actualizar.

Prueba de la directiva personalizada

  1. Inicie sesión en Azure Portal.
  2. Si tiene acceso a varios inquilinos, seleccione el icono Configuración en el menú superior para cambiar a su inquilino de Azure AD B2C desde el menú Directorios y suscripciones.
  3. En Azure Portal, busque y seleccione Azure AD B2C.
  4. En Directivas, seleccione Identity Experience Framework.
  5. Seleccione la directiva de usuarios de confianza, por ejemplo B2C_1A_signup_signin.
  6. En Aplicación, seleccione la aplicación web que registró anteriormente. La dirección URL de respuesta debe mostrar https://jwt.ms.
  7. Seleccione el botón Ejecutar ahora.
  8. En la página de registro o de inicio de sesión, seleccione Contoso AD FS para iniciar sesión con el proveedor de identidades de Contoso AD FS.

Si el proceso de inicio de sesión se completa correctamente, el explorador se redirige a https://jwt.ms, que muestra el contenido del token devuelto por Azure AD B2C.

Solución de problemas del servicio de AD FS

AD FS se configura para utilizar el registro de aplicaciones de Windows. Si experimenta problemas al configurar AD FS como proveedor de identidades de SAML mediante directivas personalizadas en Azure AD B2C, puede que quiera comprobar el registro de eventos de AD FS:

  1. En la barra de búsqueda de Windows, escriba Visor de eventos y, después, seleccione la aplicación de escritorio Visor de eventos.
  2. Para ver el registro de un equipo diferente, haga clic con el botón derecho en Visor de eventos (local) . Seleccione Conectarse a otro equipo y rellene los campos para completar el cuadro de diálogo Seleccionar equipo.
  3. En Visor de eventos, abra Registros de aplicaciones y servicios.
  4. Seleccione AD FS y, a continuación, seleccione Administración.
  5. Para ver más información acerca de un evento, haga doble clic en el suceso.

La solicitud SAML no está firmada con el evento de algoritmo de firma esperado

Este error indica que la solicitud SAML enviada por Azure AD B2C no está firmada con el algoritmo de firma esperado configurado en AD FS. Por ejemplo, la solicitud SAML está firmada con el algoritmo de firma rsa-sha256, pero el algoritmo de firma esperado es rsa-sha1. Para corregir este problema, asegúrese de que tanto Azure AD B2C como AD FS estén configurados con el mismo algoritmo de firma.

Opción 1: Establecer el algoritmo de firma en Azure AD B2C

Puede configurar cómo firmar la solicitud SAML en Azure AD B2C. Los metadatos de XmlSignatureAlgorithm controlan el valor del parámetro SigAlg (cadena de consulta o parámetro de publicación) en la solicitud SAML. En el ejemplo siguiente se configura Azure AD B2C para usar el algoritmo de firma rsa-sha256.

<Metadata>
  <Item Key="WantsEncryptedAssertions">false</Item>
  <Item Key="PartnerEntity">https://your-AD-FS-domain/federationmetadata/2007-06/federationmetadata.xml</Item>
  <Item Key="XmlSignatureAlgorithm">Sha256</Item>
</Metadata>

Opción 2: Establecer el algoritmo de signatura en AD FS

Como alternativa, puede configurar el algoritmo de firma esperado de la solicitud SAML en AD FS.

  1. En el Administrador del servidor, seleccione Herramientas y luego Administración de AD FS.
  2. Seleccione la Relación de confianza para usuario autenticado que creó anteriormente.
  3. Seleccione Propiedades y luego Avanzado.
  4. Configure el Algoritmo hash seguro y seleccione Aceptar para guardar los cambios.

La solicitud de redireccionamiento HTTP no contiene el parámetro obligatorio "Signature" para una solicitud firmada (AADB2C90168).

Opción 1: Establecer ResponsesSigned en false en Azure AD B2C

Puede deshabilitar el requisito de mensaje firmado en Azure AD B2C. En el ejemplo siguiente se configura Azure AD B2C para que no requiera el parámetro "Signature" para la solicitud firmada.

<Metadata>
  <Item Key="WantsEncryptedAssertions">false</Item>
  <Item Key="PartnerEntity">https://your-AD-FS-domain/federationmetadata/2007-06/federationmetadata.xml</Item>
  <Item Key="ResponsesSigned">false</Item>
</Metadata>

Opción 2: Establecer el usuario de confianza en AD FS para firmar el mensaje y la aserción

Como alternativa, puede configurar el usuario de confianza en AD FS como se menciona a continuación:

  1. Abra PowerShell como administrador y ejecute el cmdlet Set-AdfsRelyingPartyTrust -TargetName <RP Name> -SamlResponseSignature MessageAndAssertion para firmar el mensaje y la aserción.
  2. Ejecute Set-AdfsRelyingPartyTrust -TargetName <RP Name> y confirme que la propiedad SamlResponseSignature está configurada como MessageAndAssertion.