Compartir vía


Definición de un perfil técnico de transformación de notificaciones en una directiva personalizada de Azure Active Directory B2C

Importante

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

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.

Un perfil técnico de transformación de notificaciones permite llamar a transformaciones de notificaciones de salida para manipular valores de notificaciones, validar notificaciones o establecer valores predeterminados para un conjunto de notificaciones de salida.

Protocolo

El atributo Name del elemento Protocol tiene que establecerse en Proprietary. El atributo de controlador debe contener el nombre completo del ensamblado de controlador de protocolo que usa Azure AD B2C: Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.

En el ejemplo siguiente se muestra un perfil técnico de transformación de notificaciones:

<TechnicalProfile Id="Facebook-OAUTH-UnLink">
    <DisplayName>Unlink Facebook</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  ...

Notificaciones de salida

El elemento OutputClaims es obligatorio. Proporcione al menos una notificación de salida devuelta por el perfil técnico. En el ejemplo siguiente se muestra cómo establecer valores predeterminados en las notificaciones de salida:

<OutputClaims>
  <OutputClaim ClaimTypeReferenceId="ageGroup" DefaultValue="Undefined" />
  <OutputClaim ClaimTypeReferenceId="ageGroupValueChanged" DefaultValue="false" />
</OutputClaims>

Transformaciones de notificaciones de salida

El elemento OutputClaimsTransformations puede contener una colección de elementos OutputClaimsTransformation que se usan para modificar las notificaciones o generar nuevas. El siguiente perfil técnico llama a la transformación de notificaciones RemoveAlternativeSecurityIdByIdentityProvider . Esta transformación de notificaciones quita una identificación social de la colección de AlternativeSecurityIds. Las notificaciones de salida de este perfil técnico son identityProvider2, que se establece facebook.comen y AlternativeSecurityIds, que contiene la lista de identidades sociales asociadas a este usuario después de quitar facebook.com identidad.

<ClaimsTransformations>
  <ClaimsTransformation Id="RemoveAlternativeSecurityIdByIdentityProvider"
TransformationMethod="RemoveAlternativeSecurityIdByIdentityProvider">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="IdentityProvider2"
TransformationClaimType="identityProvider" />
      <InputClaim ClaimTypeReferenceId="AlternativeSecurityIds"
TransformationClaimType="collection" />
    </InputClaims>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="AlternativeSecurityIds"
TransformationClaimType="collection" />
    </OutputClaims>
  </ClaimsTransformation>
</ClaimsTransformations>
...
<TechnicalProfile Id="Facebook-OAUTH-UnLink">
    <DisplayName>Unlink Facebook</DisplayName>
    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
    <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="identityProvider2" DefaultValue="facebook.com" AlwaysUseDefaultValue="true" />
    </OutputClaims>
    <OutputClaimsTransformations>
        <OutputClaimsTransformation ReferenceId="RemoveAlternativeSecurityIdByIdentityProvider" />
    </OutputClaimsTransformations>
    <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

El perfil técnico de transformación de notificaciones permite ejecutar una transformación de notificaciones desde cualquier paso de orquestación del recorrido del usuario. En el ejemplo siguiente, el paso de orquestación llama a uno de los perfiles técnicos de desvinculación, como UnLink-Facebook-OAUTH. Este perfil técnico llama a la transformación de notificaciones de salida RemoveAlternativeSecurityIdByIdentityProvider, que genera una nueva notificación AlternativeSecurityIds2 . La notificación de salida contiene la lista de identidades sociales del usuario, al tiempo que quita la identidad de Facebook de las colecciones.

<UserJourney Id="AccountUnLink">
  <OrchestrationSteps>
    ...
    <OrchestrationStep Order="8" Type="ClaimsExchange">
      <ClaimsExchanges>
        <ClaimsExchange Id="UnLinkFacebookExchange" TechnicalProfileReferenceId="UnLink-Facebook-OAUTH" />
        <ClaimsExchange Id="UnLinkMicrosoftExchange" TechnicalProfileReferenceId="UnLink-Microsoft-OAUTH" />
        <ClaimsExchange Id="UnLinkGitHubExchange" TechnicalProfileReferenceId="UnLink-GitHub-OAUTH" />
      </ClaimsExchanges>
    </OrchestrationStep>
    ...
  </OrchestrationSteps>
</UserJourney>

Metadatos

Atributo Obligatorio Descripción
IncludeClaimResolvingInClaimsHandling No Para las notificaciones de entrada y salida, especifica si la resolución de notificaciones se incluye en el perfil técnico. Valores posibles: true o false (valor predeterminado). Si desea usar una resolución de notificaciones en el perfil técnico, establezca estos metadatos trueen .
ContentDefinitionReferenceId No Identificador de la definición de contenido asociada a este perfil técnico. Los metadatos de definición de contenido son necesarios para las transformaciones de notificaciones FormatLocalizedStrings, GetLocalizedStringsTransformation y GetMappedValueFromLocalizedCollection .

Uso de un perfil técnico de validación

Se puede usar un perfil técnico de transformación de notificaciones para validar la información. En el ejemplo siguiente, el perfil técnico autoafirmado denominado LocalAccountSignUpWithLogonEmail pide al usuario que escriba el correo electrónico dos veces y, a continuación, llama al perfil técnico de validación denominado Validate-Email para validar los correos electrónicos. El perfil técnico Validate-Email llama a la transformación de notificaciones AssertEmailAreEqual para comparar los dos correos electrónicos de notificaciones y emailRepeat, y produce una excepción si no son iguales según la comparación especificada.

<ClaimsTransformations>
  <ClaimsTransformation Id="AssertEmailAreEqual" TransformationMethod="AssertStringClaimsAreEqual">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="inputClaim1" />
      <InputClaim ClaimTypeReferenceId="emailRepeat" TransformationClaimType="inputClaim2" />
    </InputClaims>
    <InputParameters>
      <InputParameter Id="stringComparison" DataType="string" Value="ordinalIgnoreCase" />
    </InputParameters>
  </ClaimsTransformation>
</ClaimsTransformations>

El perfil técnico de transformación de notificaciones llama a la transformación de notificaciones AssertEmailAreEqual , que afirma que los correos electrónicos proporcionados por el usuario son los mismos.

<TechnicalProfile Id="Validate-Email">
  <DisplayName>Unlink Facebook</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="emailRepeat" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="email" />
  </OutputClaims>
  <OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="AssertEmailAreEqual" />
  </OutputClaimsTransformations>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

Un perfil técnico autoafirmado puede llamar al perfil técnico de validación y mostrar el mensaje de error tal como se especifica en los metadatos UserMessageIfClaimsTransformationStringsAreNotEqual .

<TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
  <DisplayName>User ID signup</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    ...
    <Item Key="UserMessageIfClaimsTransformationStringsAreNotEqual">The email addresses you provided are not the same</Item>
  </Metadata>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="email" />
    <OutputClaim ClaimTypeReferenceId="emailRepeat" />
    ...
  </OutputClaims>
  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="Validate-Email" />
  </ValidationTechnicalProfiles>
</TechnicalProfile>