다음을 통해 공유


Azure Active Directory B2C 사용자 지정 정책에서 OAuth2 사용자 지정 오류 기술 프로필 정의

이 문서에서는 Azure AD B2C(Azure Active Directory B2C)를 사용하여 OAuth2 사용자 지정 오류를 처리하는 방법을 설명합니다. 정책 내에서 논리가 잘못된 경우 이 기술 프로필을 사용합니다. 기술 프로필은 OAuth2 또는 OpenId Connect 신뢰 당사자 애플리케이션에 오류를 반환합니다. OAuth2 사용자 지정 오류 기술 프로필의 실시간 데모를 체크 아웃합니다.

사용자 지정 OAuth2 오류 메시지를 처리하려면:

  1. OAuth2 오류 기술 프로필을 정의합니다.
  2. 오류 코드 및 오류 메시지 클레임을 설정합니다.
  3. 사용자 경험에서 OAuth2 오류 기술 프로필을 호출합니다.

OAuth2 오류

오류는 다음 데이터와 함께 반환됩니다.

  • error - access_denied
  • error_description - AAD_Custom_<errorCode>: <errorMessage> 규칙을 사용하는 오류 메시지입니다.
  • 상관 관계 ID - Azure AD B2C 상관 관계 ID입니다.
  • Timestamp - 오류의 타임스탬프입니다.

다음 예제에서는 앱에 반환 https://jwt.ms 되는 사용자 지정 오류 메시지를 보여 줍니다.

https://jwt.ms/#error=access_denied&error_description=AAD_Custom_1234%3a+My+custom+error+message%0d%0aCorrelation+ID%3a+233bf9bd-747a-4800-9062-6236f3f69a47%0d%0aTimestamp%3a+2021-03-25+14%3a01%3a23Z%0d%0a

프로토콜

Protocol 요소의 Name 특성을 .로 설정OAuth2해야 합니다. OutputTokenFormat 요소를 OAuth2Error.로 설정합니다.

다음 예제에서는 다음에 대한 기술 프로필을 보여줍니다.ReturnOAuth2Error

<!--
 <ClaimsProviders> -->
  <ClaimsProvider>
    <DisplayName>Token Issuer</DisplayName>
    <TechnicalProfiles>
      <TechnicalProfile Id="ReturnOAuth2Error">
        <DisplayName>Return OAuth2 error</DisplayName>
        <Protocol Name="OAuth2" />
        <OutputTokenFormat>OAuth2Error</OutputTokenFormat>
        <CryptographicKeys>
          <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
        </CryptographicKeys>
        <InputClaims>
          <InputClaim ClaimTypeReferenceId="errorCode" />
          <InputClaim ClaimTypeReferenceId="errorMessage" />
        </InputClaims>
      </TechnicalProfile>
    </TechnicalProfiles>
  </ClaimsProvider>
<!--
</ClaimsProviders> -->

오류 코드 및 오류 메시지의 사용자 지정 값을 생성하는 클레임 변환 정의

다음 단계를 사용하여 오류 코드 및 오류 메시지의 사용자 지정 값을 생성합니다.

  1. 요소를 찾은 ClaimsTransformations 다음 그 안에 다음 코드를 추가합니다.

    <!--
     <ClaimsTransformations> -->
    <ClaimsTransformation Id="GenerateErrorCode" TransformationMethod="CreateStringClaim">
            <InputParameters>
              <InputParameter Id="value" DataType="string" Value="Error_001" />
            </InputParameters>
            <OutputClaims>
              <OutputClaim ClaimTypeReferenceId="errorCode" TransformationClaimType="createdClaim" />
            </OutputClaims>
          </ClaimsTransformation>
          <ClaimsTransformation Id="GenerateErrorMessage" TransformationMethod="CreateStringClaim">
            <InputParameters>
              <InputParameter Id="value" DataType="string" Value="Insert error description." />
            </InputParameters>
            <OutputClaims>
              <OutputClaim ClaimTypeReferenceId="errorMessage" TransformationClaimType="createdClaim" />
            </OutputClaims>
          </ClaimsTransformation>
    <!--
    </ClaimsTransformations> -->
    
  2. 정의한 Oauth2 기술 전에 기술 프로필 요소에 두 클레임 변환 OutputClaimsTransformations 을 추가합니다.

        <OutputClaimsTransformations>
          <OutputClaimsTransformation ReferenceId="generateErrorCode" />
          <OutputClaimsTransformation ReferenceId="generateErrorMessage" />
        </OutputClaimsTransformations>
    

입력 클레임

Inputclaims 요소는 OAuth2 오류를 반환하는 데 필요한 클레임 목록을 포함합니다.

ClaimReferenceId Required Description
errorCode 오류 코드입니다.
errorMessage 오류 메시지입니다.

암호화 키

CryptographicKeys 요소는 다음 키를 포함합니다.

특성 필수 설명
issuer_secret X509 인증서(RSA 키 집합). B2C_1A_TokenSigningKeyContainer 사용자 지정 정책 시작에서 구성하는 키를 사용합니다.

기술 프로필 호출

사용자 경험 또는 하위 경험(transfer 유형)에서 OAuth2 오류 기술 프로필을 호출할 수 있습니다. OAuth2 오류 기술 프로필에 대한 참조를 사용하여 오케스트레이션 단계 유형을 SendClaims로 설정합니다.

사용자 경험 또는 하위 경험에 이미 다른 SendClaims 오케스트레이션 단계가 DefaultCpimIssuerTechnicalProfileReferenceId 있는 경우 특성을 토큰 발급자 기술 프로필로 설정합니다.

다음 예제에서

  • 사용자 경험은 SignUpOrSignIn-Custom 토큰 발급자 기술 프로필JwtIssuer로 설정합니다DefaultCpimIssuerTechnicalProfileReferenceId.
  • 여덟 번째 오케스트레이션 단계에서는 해당 오케스트레이션 단계가 errorCode 있는지 확인합니다. 그렇다면 기술 프로필을 호출 ReturnOAuth2Error 하여 오류를 반환합니다.
  • 존재하지 않는 경우 errorCode 아홉 번째 오케스트레이션 단계에서 토큰을 발급합니다.
<UserJourney Id="SignUpOrSignIn-Custom" DefaultCpimIssuerTechnicalProfileReferenceId="JwtIssuer">
  <OrchestrationSteps>
    ...
    <OrchestrationStep Order="8" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="ReturnOAuth2Error">
      <Preconditions>
        <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
          <Value>errorCode</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
      </Preconditions>
    </OrchestrationStep>

    <OrchestrationStep Order="9" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />

  </OrchestrationSteps>
  <ClientDefinition ReferenceId="DefaultWeb" />
</UserJourney>

필요에 따라 사전 조건을 사용하여 Oauth2 오류 기술 프로필을 조작할 수 있습니다. 예를 들어 이메일 클레임이 없는 경우 Oauth2 오류 기술 프로필을 호출하도록 설정할 수 있습니다.

<OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="ReturnOAuth2Error">
      <Preconditions>
        <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
          <Value>email</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
      </Preconditions>
    </OrchestrationStep>

다음 단계

UserJourneys에 대해 알아보기