Definir um perfil técnico de transformação de afirmações numa política personalizada do Azure Active Directory B2C

Nota

No Azure Active Directory B2C, as políticas personalizadas são concebidas principalmente para abordar cenários complexos. Para a maioria dos cenários, recomendamos que utilize fluxos de utilizador incorporados. Se ainda não o fez, saiba mais sobre o pacote de introdução de políticas personalizadas em Introdução às políticas personalizadas no Active Directory B2C.

Um perfil técnico de transformação de afirmações permite-lhe chamar transformações de afirmações de saída para manipular valores de afirmações, validar afirmações ou definir valores predefinidos para um conjunto de afirmações de saída.

Protocolo

O atributo Nome do elemento Protocolo tem de ser definido como Proprietary. O atributo do processador tem de conter o nome completamente qualificado da assemblagem do processador de protocolos que é utilizada pelo Azure AD B2C: Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.

O exemplo seguinte mostra um perfil técnico de transformação de afirmações:

<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" />
  ...

Afirmações de saída

O elemento OutputClaims é obrigatório. Indique pelo menos uma afirmação de saída devolvida pelo perfil técnico. O exemplo seguinte mostra como definir valores predefinidos nas afirmações de saída:

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

Transformações de afirmações de saída

O elemento OutputClaimsTransformations pode conter uma coleção de elementos OutputClaimsTransformation que são utilizados para modificar afirmações ou gerar novas. O seguinte perfil técnico chama a transformação de afirmações RemoveAlternativeSecurityIdByIdentityProvider . Esta transformação de afirmações remove uma identificação social da coleção de AlternativeSecurityIds. As afirmações de saída deste perfil técnico são identityProvider2, que está definido como facebook.com, e AlternativeSecurityIds, que contém a lista de identidades sociais associadas a este utilizador após facebook.com identidade ser removida.

<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>

O perfil técnico de transformação de afirmações permite-lhe executar uma transformação de afirmações a partir do passo de orquestração de qualquer percurso de utilizador. No exemplo seguinte, o passo de orquestração chama um dos perfis técnicos de desassociação, como UnLink-Facebook-OAUTH. Este perfil técnico chama à transformação de afirmações de saída RemoveAlternativeSecurityIdByIdentityProvider, que gera uma nova afirmação AlternativeSecurityIds2 . A afirmação de saída contém a lista de identidades sociais do utilizador, ao mesmo tempo que remove a identidade do Facebook das coleções.

<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>

Metadados

Atributo Necessário Descrição
IncludeClaimResolvingInClaimsHandling No Para afirmações de entrada e saída, especifica se a resolução de afirmações está incluída no perfil técnico. Valores possíveis: trueou false (predefinição). Se quiser utilizar uma resolução de afirmações no perfil técnico, defina estes metadados como true.
ContentDefinitionReferenceId No O identificador da definição de conteúdo associada a este perfil técnico. Os metadados de definição de conteúdo são necessários para as transformações de afirmações FormatLocalizedStringStringsTransformation e GetMappedValueFromLocalizedCollection.

Utilizar um perfil técnico de validação

Um perfil técnico de transformação de afirmações pode ser utilizado para validar informações. No exemplo seguinte, o perfil técnico auto-afirmado denominado LocalAccountSignUpWithLogonEmail pede ao utilizador para introduzir o e-mail duas vezes e, em seguida, chama o perfil técnico de validação denominado Validate-Email para validar os e-mails. O perfil técnico Validate-Email chama a transformação de afirmações AssertEmailAreEqual para comparar o e-mail e o e-mail de duas afirmaçõesRepeat e lançar uma exceção se não forem iguais de acordo com a comparação 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>

O perfil técnico de transformação de afirmações chama a transformação de afirmações AssertEmailAreEqual , que afirma que os e-mails fornecidos pelo utilizador são os mesmos.

<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>

Um perfil técnico auto-afirmado pode chamar o perfil técnico de validação e mostrar a mensagem de erro conforme especificado nos metadados 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>