Azure Active Directory B2C 사용자 지정 정책에서 클레임 변환 기술 프로필 정의

참고

Azure Active Directory B2C에서 사용자 지정 정책은 주로 복잡한 시나리오를 해결하기 위해 설계되었습니다. 대부분의 시나리오에서 기본 제공 사용자 흐름을 사용하는 것이 좋습니다. 아직 수행하지 않았다면 Active Directory B2C에서 사용자 지정 정책 시작하기에서 사용자 지정 정책 스타터 팩에 대해 알아봅니다.

클레임 변환 기술 프로필을 사용하면 출력 클레임 변환을 호출하여 클레임 값을 조작하거나, 클레임의 유효성을 검사하거나, 출력 클레임 집합의 기본값을 설정할 수 있습니다.

프로토콜

Protocol 요소의 Name 특성은 Proprietary로 설정해야 합니다. handler 특성은 Azure AD B2C에서 사용되는 프로토콜 처리기 어셈블리의 정규화된 이름을 포함해야 합니다. Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

다음 예제는 클레임 변환 기술 프로필을 보여 줍니다.

<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 요소는 필수입니다. 기술 프로필에서 반환된 하나 이상의 출력 클레임을 제공합니다. 다음 예제는 출력 클레임에서 기본값을 설정하는 방법을 보여 줍니다.

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

출력 클레임 변환

OutputClaimsTransformations 요소는 클레임을 수정하거나 새 클레임을 생성하는 데 사용되는 OutputClaimsTransformation 요소 컬렉션을 포함할 수 있습니다. 다음 기술 프로필은 RemoveAlternativeSecurityIdByIdentityProvider 클레임 변환을 호출합니다. 이 클레임 변환은 AlternativeSecurityIds컬렉션에서 소셜 ID를 제거합니다. 이 기술 프로필의 출력 클레임은 facebook.com으로 설정된 identityProvider2 및 facebook.com ID가 제거된 후 이 사용자와 연결된 소셜 ID 목록을 포함하는 AlternativeSecurityIds입니다.

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

클레임 변환 기술 프로필을 사용하면 사용자 경험의 오케스트레이션 단계에서 클레임 변환을 실행할 수 있습니다. 다음 예제에서 오케스트레이션 단계는 UnLink-Facebook-OAUTH와 같은 링크 해제 기술 프로필 중 하나를 호출합니다. 이 기술 프로필은 새 AlternativeSecurityIds2 클레임을 생성하는 출력 클레임 변환 RemoveAlternativeSecurityIdByIdentityProvider를 호출합니다. 출력 클레임은 컬렉션에서 Facebook ID를 제거하는 동안 사용자의 소셜 ID 목록을 포함합니다.

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

메타데이터

attribute 필수 설명
IncludeClaimResolvingInClaimsHandling 입력 및 출력 클레임의 경우 기술 프로필에 클레임 해결이 포함되는지 여부를 지정합니다. 가능한 값은 true 또는 false(기본값)입니다. 기술 프로필에서 클레임 확인 프로그램을 사용하려는 경우 이 메타데이터를 true로 설정합니다.
ContentDefinitionReferenceId No 이 기술 프로필과 연결된 콘텐츠 정의의 식별자입니다. 콘텐츠 정의 메타데이터는 FormatLocalizedString, GetLocalizedStringsTransformationGetMappedValueFromLocalizedCollection 클레임 변환에 필요합니다.

유효성 검사 기술 프로필 사용

클레임 변환 기술 프로필을 사용하여 정보의 유효성을 검사할 수 있습니다. 다음 예제에서 LocalAccountSignUpWithLogonEmail이라는 자체 어설션된 기술 프로필은 사용자에게 메일을 두 번 입력하도록 요청한 다음, Validate-Email이라는 유효성 검사 기술 프로필을 호출하여 메일의 유효성을 검사합니다. Validate-Email 기술 프로필은 클레임 변환 AssertEmailAreEqual을 호출하여 두 개의 클레임 emailemailRepeat를 비교하고, 지정된 비교에 따라 서로 같지 않은 경우 예외를 throw합니다.

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

클레임 변환 기술 프로필은 AssertEmailAreEqual 클레임 변환을 호출하며, 이는 사용자가 제공한 메일이 같다고 어설션합니다.

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

자체 어설션된 기술 프로필은 유효성 검사 기술 프로필을 호출하고 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>