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

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 los valores de notificaciones, validarlas 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 handler 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 otras nuevas. El perfil técnico siguiente llama a la transformación de notificaciones RemoveAlternativeSecurityIdByIdentityProvider. Esta transformación de notificaciones quita una identidad social de la colección de AlternativeSecurityIds. Las notificaciones de salida de este perfil técnico son identityProvider2, que se establece en facebook.com, y AlternativeSecurityIds, que contiene la lista de identidades sociales asociadas a este usuario después de quitar la identidad facebook.com.

<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 del paso de orquestación del recorrido de cualquier 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 siguiente 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 se 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 En el caso de las notificaciones de entrada y salida, especifica si se incluye la resolución de notificaciones en el perfil técnico. Valores posibles: true o false (valor predeterminado). Si desea utilizar un solucionador de notificaciones en el perfil técnico, establézcalo estos metadatos en true.
ContentDefinitionReferenceId No El 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 FormatLocalizedString, GetLocalizedStringsTransformation y GetMappedValueFromLocalizedCollection.

Uso de un perfil técnico de validación

Un perfil técnico de transformación de notificaciones se puede usar 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, después, 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 las dos notificaciones email y emailRepeat, e inicia 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 confirma que los mensajes de correo electrónico proporcionados por el usuario sean 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 autofirmado puede llamar al perfil técnico de validación y mostrar el mensaje de error especificado en los metadatos de 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>