다음을 통해 공유


Azure Active Directory B2C에서 사용자 액세스 관리

중요합니다

2025년 5월 1일부터 새 고객을 위해 Azure AD B2C를 더 이상 구매할 수 없습니다. FAQ에서 자세히 알아보세요.

이 문서에서는 Azure AD B2C(Azure Active Directory B2C)를 사용하여 애플리케이션에 대한 사용자 액세스를 관리하는 방법을 설명합니다. 애플리케이션의 액세스 관리에는 다음이 포함됩니다.

  • 미성년자 식별 및 애플리케이션에 대한 사용자 액세스 제어
  • 미성년자가 응용 프로그램을 사용하도록 보호자 동의를 요구합니다.
  • 사용자로부터 출생 및 국가/지역 데이터 수집
  • 사용 약관 규약 캡처 및 액세스 제어

비고

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

사소한 액세스 제어

애플리케이션 및 조직은 미성년자가 이 대상 그룹을 대상으로 하지 않는 애플리케이션 및 서비스를 사용하지 못하도록 차단할 수 있습니다. 또는 응용 프로그램 및 조직은 미성년자를 수락하고 이후에 부모의 동의를 관리하고 비즈니스 규칙에 따라 규정에서 허용하는 대로 미성년자에게 허용되는 환경을 제공하기로 결정할 수 있습니다.

사용자가 미성년자로 식별되는 경우 Azure AD B2C의 사용자 흐름을 다음 세 가지 옵션 중 하나로 설정할 수 있습니다.

  • 서명된 JWT id_token 애플리케이션으로 다시 보냅니다. 사용자가 디렉터리에 등록되고 토큰이 애플리케이션에 반환됩니다. 그런 다음, 비즈니스 규칙을 적용하여 애플리케이션을 진행합니다. 예를 들어 애플리케이션은 보호자 동의 프로세스를 진행할 수 있습니다. 이 메서드를 사용하려면 애플리케이션에서 ageGroupconsentProvidedForMinor 클레임을 받도록 선택합니다.

  • 서명되지 않은 JSON 토큰을 애플리케이션에 보냅니다. Azure AD B2C는 사용자가 미성년자임을 애플리케이션에 알리고 사용자의 보호자 동의 상태를 제공합니다. 그런 다음, 비즈니스 규칙을 적용하여 애플리케이션을 진행합니다. JSON 토큰은 애플리케이션에 대한 성공적인 인증을 완료하지 않습니다. 애플리케이션은 이름, 이메일, ageGroupconsentProvidedForMinor를 포함할 수 있는 JSON 토큰에 포함된 클레임에 따라 인증되지 않은 사용자를 처리해야 합니다.

  • 사용자 차단: 사용자가 미성년자이고 보호자 동의가 제공되지 않은 경우 Azure AD B2C는 차단되었음을 사용자에게 알릴 수 있습니다. 토큰이 발급되지 않고, 액세스가 차단되며, 등록 과정에서 사용자 계정이 만들어지지 않습니다. 이 알림을 구현하려면 적절한 HTML/CSS 콘텐츠 페이지를 제공하여 사용자에게 알리고 적절한 옵션을 제공합니다. 애플리케이션에서 새 등록을 위한 추가 작업이 필요하지 않습니다.

애플리케이션 규정에 따라 성인으로 확인된 사용자가 보호자 동의를 부여해야 할 수 있습니다. Azure AD B2C는 개인의 나이를 확인한 다음 확인된 성인이 미성년자에게 보호자 동의를 부여할 수 있는 환경을 제공하지 않습니다. 이 환경은 애플리케이션 또는 다른 서비스 공급자가 제공해야 합니다.

다음은 보호자 동의를 수집하기 위한 사용자 흐름의 예입니다.

  1. Microsoft Graph API 작업은 사용자를 미성년자로 식별하고 서명되지 않은 JSON 토큰의 형태로 애플리케이션에 사용자 데이터를 반환합니다.

  2. 애플리케이션은 JSON 토큰을 처리하고 미성년자에게 화면을 표시하여 보호자 동의가 필요하다고 알리고 온라인에서 부모의 동의를 요청합니다.

  3. Azure AD B2C는 사용자가 정상적으로 로그인할 수 있는 로그인 과정을 표시하고 legalAgeGroupClassification = "minorWithParentalConsent"를 포함하도록 설정된 애플리케이션에 토큰을 발급합니다. 애플리케이션은 부모의 이메일 주소를 수집하고 부모가 성인인지 확인합니다. 이를 위해 국가/지역 ID 사무실, 라이선스 확인 또는 신용 카드 증명과 같은 신뢰할 수 있는 원본을 사용합니다. 확인에 성공하면 애플리케이션은 Azure AD B2C 사용자 흐름을 사용하여 미성년자에게 로그인하라는 메시지를 표시합니다. 동의가 거부되면(예: legalAgeGroupClassification = "minorWithoutParentalConsent") Azure AD B2C는 동의 프로세스를 다시 시작하기 위해 애플리케이션에 JSON 토큰(로그인 아님)을 반환합니다. 필요에 따라 미성년자 또는 성인이 미성년자의 이메일 주소 또는 기록상 성인의 이메일 주소로 등록 코드를 전송하여 미성년자의 계정에 다시 액세스할 수 있도록 사용자 흐름을 사용자 지정할 수 있습니다.

  4. 애플리케이션은 미성년자에게 동의를 취소하는 옵션을 제공합니다.

  5. 미성년자 또는 성인이 동의를 취소하면 Microsoft Graph API를 사용하여 consentProvidedForMinor거부하도록 변경할 수 있습니다. 또는 애플리케이션에서 동의가 취소된 미성년자를 삭제하도록 선택할 수 있습니다. 필요에 따라 인증된 미성년자(또는 미성년자의 계정을 사용하는 부모)가 동의를 취소할 수 있도록 사용자 흐름을 사용자 지정할 수 있습니다. Azure AD B2C는 consentProvidedForMinor거부됨으로 기록합니다.

legalAgeGroupClassification, consentProvidedForMinorageGroup에 대한 자세한 내용은 사용자 리소스 유형을 참조하세요. 사용자 지정 특성에 대한 자세한 내용은 사용자 지정 특성을 사용하여 소비자에 대한 정보를 수집합니다. Microsoft Graph API를 사용하여 확장 특성을 처리하는 경우 extension_18b70cf9bb834edd8f38521c2583cd86_dateOfBirth 같은 긴 버전의 특성을 사용해야 합니다( 2011-01-01T00:00:00Z).

생년월일 및 국가/지역 데이터 수집

애플리케이션은 Azure AD B2C를 사용하여 등록하는 동안 모든 사용자의 DOB(생년월일) 및 국가/지역 정보를 수집할 수 있습니다. 이 정보가 아직 없는 경우 애플리케이션은 다음 인증(로그인) 과정에서 사용자에게 요청할 수 있습니다. 사용자는 DOB 및 국가/지역 정보를 제공하지 않고 진행할 수 없습니다. Azure AD B2C는 이 정보를 사용하여 해당 국가/지역의 규정 표준에 따라 개인이 미성년자로 간주되는지 여부를 결정합니다.

사용자 지정 사용자 흐름은 DOB 및 국가/지역 정보를 수집하고 Azure AD B2C 클레임 변환을 사용하여 ageGroup 을 결정하고 결과를 디렉터리에 유지하거나 DOB 및 국가/지역 정보를 직접 유지할 수 있습니다.

다음 단계에서는 사용자의 생년월일에서 ageGroup 을 계산하는 데 사용되는 논리를 보여 줍니다.

  1. 목록에서 국가/지역 코드별로 국가/지역을 찾습니다. 국가/지역을 찾을 수 없는 경우 기본값으로 대체합니다.

  2. MinorConsent 노드가 국가/지역 요소에 있는 경우:

    a. 사용자가 성인으로 간주되기 위해 태어난 날짜를 계산합니다. 예를 들어 현재 날짜가 2015년 3월 14일이고 MinorConsent 가 18인 경우 생년월일은 2000년 3월 14일이어야 합니다.

    b. 최소 생년월일을 실제 생년월일과 비교합니다. 최소 생년월일이 사용자의 생년월일 이전인 경우 계산은 미성년자 를 연령 그룹 계산으로 반환합니다.

  3. MinorNoConsentRequired 노드가 국가/지역 요소에 있는 경우 MinorNoConsentRequired의 값을 사용하여 2a 및 2b단계를 반복합니다. 최소 생년월일이 사용자의 생년월일 이전인 경우 2b의 출력은 MinorNoConsentRequired 를 반환합니다.

  4. 두 계산 모두 true를 반환하지 않으면 계산은 Adult을 반환합니다.

애플리케이션이 다른 방법으로 DOB 또는 국가/지역 데이터를 안정적으로 수집한 경우 애플리케이션은 Graph API를 사용하여 이 정보로 사용자 레코드를 업데이트할 수 있습니다. 다음은 그 예입니다.

  • 사용자가 성인으로 알려진 경우 디렉터리 특성 ageGroup성인 값으로 업데이트합니다.
  • 사용자가 미성년자로 알려진 경우 디렉터리 특성 ageGroupMinor 값으로 업데이트하고 consentProvidedForMinor를 적절하게 설정합니다.

사소한 계산 규칙

나이 게이팅에는 두 가지 연령 값, 즉 누군가가 더 이상 미성년자로 간주되지 않는 연령과 미성년자가 부모의 동의를 받아야 하는 연령이 포함됩니다. 다음 표에서는 동의가 필요한 미성년자 및 미성년자를 정의하는 데 사용되는 연령 규칙을 나열합니다.

국가/지역 국가/지역 이름 사소한 동의 연령 미성년
기본값 없음 없음 18
AE 아랍 에미리트 연합국 없음 21
오스트리아 14 18
존재하다 벨기에 14 18
BG 불가리아 16 18
브에이치(BH) 바레인 없음 21
센티미터 카메룬 없음 21
CY 키프로스 16 18
CZ 체코 공화국 16 18
독일 독일 16 18
DK 덴마크 16 18
EE 에스토니아 16 18
이집트 없음 21
ES 스페인 13 18
FR(프랑스) 프랑스 16 18
기가바이트 영국 13 18
GR 그리스 16 18
인사관리 크로아티아 16 18
HU(HU) 헝가리 16 18
인터넷 익스플로러 아일랜드 13 18
정보기술 이탈리아 16 18
KR 대한민국 14 18
LT 리투아니아 16 18
LU 룩셈부르크 16 18
LV 라트비아 16 18
마운트 몰타 16 18
NA 나미비아 없음 21
네덜란드 네덜란드 16 18
PL 폴란드 13 18
피지컬 트레이닝(PT) 포르투갈 16 18
RO (로) 루마니아 16 18
SE 스웨덴 13 18
에스지 싱가포르 없음 21
국제 단위계 슬로베니아 16 18
SK (주) 슬로바키아 16 18
TD 차드 없음 21
목요일 태국 없음 20
TW 대만 없음 20
미국 미국 13 18

사용 약관 계약 캡처

애플리케이션을 개발할 때 일반적으로 사용자 디렉터리의 참여가 없거나 사소한 경우에만 애플리케이션 내에서 사용자의 사용 약관 동의를 캡처합니다. 그러나 Azure AD B2C 사용자 흐름을 사용하여 사용자의 사용 약관 동의를 수집하고, 동의가 부여되지 않은 경우 액세스를 제한하고, 최신 승인 날짜 및 최신 버전의 사용 약관 날짜에 따라 향후 사용 약관 변경에 대한 동의를 적용할 수 있습니다.

사용 약관에는 "제3자와 데이터 공유 동의"도 포함될 수 있습니다. 현지 규정 및 비즈니스 규칙에 따라 두 조건을 결합한 사용자의 동의를 수집하거나 사용자가 다른 조건이 아닌 하나의 조건을 수락하도록 허용할 수 있습니다.

다음 단계에서는 사용 약관을 관리하는 방법을 설명합니다.

  1. Graph API 및 확장 특성을 사용하여 사용 약관 동의 및 수락 날짜를 기록합니다. 기본 제공 사용자 흐름과 사용자 지정 정책을 모두 사용하여 이 작업을 수행할 수 있습니다. extension_termsOfUseConsentDateTime extension_termsOfUseConsentVersion 특성을 만들고 사용하는 것이 좋습니다.

  2. "사용 약관 동의"라는 레이블이 지정된 필수 확인란을 만들고 등록하는 동안 결과를 기록합니다. 기본 제공 사용자 흐름과 사용자 지정 정책을 모두 사용하여 이 작업을 수행할 수 있습니다.

  3. Azure AD B2C는 사용 약관 계약 및 사용자의 동의를 저장합니다. Graph API를 사용하여 응답을 기록하는 데 사용되는 확장 특성을 읽어 사용자의 상태를 쿼리할 수 있습니다(예: termsOfUseTestUpdateDateTime 읽기). 기본 제공 사용자 흐름과 사용자 지정 정책을 모두 사용하여 이 작업을 수행할 수 있습니다.

  4. 승인 날짜를 사용 약관의 최신 버전 날짜와 비교하여 업데이트된 사용 약관에 동의해야 합니다. 사용자 지정 사용자 흐름을 사용하여 날짜를 비교할 수 있습니다. 확장된 특성 extension_termsOfUseConsentDateTime 사용하고 값을 termsOfUseTextUpdateDateTime의 클레임과 비교합니다. 오래된 승인인 경우 셀프 어설션 화면을 표시하여 새 승인을 유도합니다. 그렇지 않으면 정책 논리를 사용하여 액세스를 차단합니다.

  5. 승인의 버전 번호를 가장 최근에 허용된 버전 번호와 비교하여 업데이트된 사용 약관에 동의해야 합니다. 사용자 지정 사용자 흐름을 사용하여 버전 번호를 비교할 수 있습니다. 확장 특성 extension_termsOfUseConsentDateTime 사용하고 값을 extension_termsOfUseConsentVersion 클레임과 비교합니다. 오래된 승인인 경우 셀프 어설션 화면을 표시하여 새 승인을 유도합니다. 그렇지 않으면 정책 논리를 사용하여 액세스를 차단합니다.

다음 시나리오에서 사용 약관 동의를 캡처할 수 있습니다.

  • 새 사용자가 등록하고 있습니다. 사용 약관이 표시되고 승인 결과가 저장됩니다.
  • 이전에 최신 또는 활성 사용 약관을 수락한 사용자가 로그인하고 있습니다. 사용 약관은 표시되지 않습니다.
  • 사용자가 최신 또는 활성 사용 약관을 아직 수락하지 않은 사용자가 로그인하고 있습니다. 사용 약관이 표시되고 승인 결과가 저장됩니다.
  • 사용자가 이미 이전 버전의 사용 약관을 수락한 상태이고, 이 약관은 이제 최신 버전으로 업데이트되었습니다. 사용 약관이 표시되고 승인 결과가 저장됩니다.

다음 이미지는 권장되는 사용자 흐름을 보여줍니다.

권장 수락 사용자 흐름을 보여 주는 흐름도 다이어그램

다음은 클레임의 날짜 기반 사용 약관 동의의 예입니다. extension_termsOfUseConsentDateTime 클레임이 2025-01-15T00:00:00보다 오래된 경우, termsOfUseConsentRequired 부울 클레임을 확인하고 자체 어설션된 화면을 표시하여 새 승인을 강제합니다.

<ClaimsTransformations>
  <ClaimsTransformation Id="GetNewUserAgreeToTermsOfUseConsentDateTime" TransformationMethod="GetCurrentDateTime">
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="extension_termsOfUseConsentDateTime" TransformationClaimType="currentDateTime" />
    </OutputClaims>
  </ClaimsTransformation>
  <ClaimsTransformation Id="IsTermsOfUseConsentRequired" TransformationMethod="IsTermsOfUseConsentRequired">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="extension_termsOfUseConsentDateTime" TransformationClaimType="termsOfUseConsentDateTime" />
    </InputClaims>
    <InputParameters>
      <InputParameter Id="termsOfUseTextUpdateDateTime" DataType="dateTime" Value="2025-01-15T00:00:00" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="termsOfUseConsentRequired" TransformationClaimType="result" />
    </OutputClaims>
  </ClaimsTransformation>
</ClaimsTransformations>

다음은 클레임에서 버전 기반 사용 약관 동의의 예입니다. extension_termsOfUseConsentVersion 클레임이 V1와 같지 않으면, termsOfUseConsentRequired 부울린 클레임을 확인하고 자체 어설션된 화면을 표시하여 새 동의를 강제로 적용합니다.

<ClaimsTransformations>
  <ClaimsTransformation Id="GetEmptyTermsOfUseConsentVersionForNewUser" TransformationMethod="CreateStringClaim">
    <InputParameters>
      <InputParameter Id="value" DataType="string" Value=""/>
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="extension_termsOfUseConsentVersion" TransformationClaimType="createdClaim" />
    </OutputClaims>
  </ClaimsTransformation>
  <ClaimsTransformation Id="GetNewUserAgreeToTermsOfUseConsentVersion" TransformationMethod="CreateStringClaim">
    <InputParameters>
      <InputParameter Id="value" DataType="string" Value="V1"/>
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="extension_termsOfUseConsentVersion" TransformationClaimType="createdClaim" />
    </OutputClaims>
  </ClaimsTransformation>
  <ClaimsTransformation Id="IsTermsOfUseConsentRequiredForVersion" TransformationMethod="CompareClaimToValue">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="extension_termsOfUseConsentVersion" TransformationClaimType="inputClaim1" />
    </InputClaims>
    <InputParameters>
      <InputParameter Id="compareTo" DataType="string" Value="V1" />
      <InputParameter Id="operator" DataType="string" Value="not equal" />
      <InputParameter Id="ignoreCase" DataType="string" Value="true" />
    </InputParameters>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="termsOfUseConsentRequired" TransformationClaimType="outputClaim" />
    </OutputClaims>
  </ClaimsTransformation>
</ClaimsTransformations>

다음 단계