중요합니다
2025년 5월 1일부터 새 고객을 위해 Azure AD B2C를 더 이상 구매할 수 없습니다. FAQ에서 자세히 알아보세요.
시작하기 전에 이 페이지의 맨 위에 있는 정책 유형 선택기를 사용하여 설정하려는 정책 유형을 선택합니다. Azure Active Directory B2C는 미리 정의된 사용자 흐름 또는 완전히 구성 가능한 사용자 지정 정책을 통해 사용자가 애플리케이션과 상호 작용하는 방법을 정의하는 두 가지 방법을 제공합니다. 이 문서에서 필요한 단계는 각 방법마다 다릅니다.
이 글에서는 Azure AD B2C(Azure Active Directory B2C) 등록 과정에서 도시와 같은 새 속성을 수집합니다. 사용자의 도시를 가져오고, 드롭다운으로 구성하고, 제공해야 하는지 여부를 정의합니다.
중요합니다
이 샘플에서는 기본 제공 클레임 'city'를 사용합니다. 대신 지원되는 Azure AD B2C 기본 제공 특성 또는 사용자 지정 특성 중 하나를 선택할 수 있습니다. 사용자 지정 특성을 사용하려면 사용자 지정 특성을 사용하도록 설정합니다. 다른 기본 제공 또는 사용자 지정 특성을 사용하려면 'city'를 원하는 특성(예: 기본 제공 특성 jobTitle 또는 extension_loyaltyId 같은 사용자 지정 특성)으로 바꿉니다.
필수 조건
- 사용자가 애플리케이션에 가입하고 로그인할 수 있도록 사용자 흐름을 만듭니다.
- 웹 애플리케이션 등록.
- Active Directory B2C에서 사용자 지정 정책을 사용하여 시작하기에 있는 단계를 완료합니다. 이 자습서에서는 Azure AD B2C 테넌트 구성을 사용하도록 사용자 지정 정책 파일을 업데이트하는 방법을 안내합니다.
- 웹 애플리케이션 등록.
사용자 흐름에 사용자 특성 추가
- Azure Portal에 로그인합니다.
- 여러 테넌트에 액세스할 수 있는 경우 상단 메뉴의 설정 아이콘을 선택하여 디렉터리 + 구독 메뉴에서 Azure AD B2C 테넌트로 전환합니다.
- Azure 서비스에서 Azure AD B2C를 선택합니다. 또는 검색 상자를 사용하여 Azure AD B2C를 찾고 선택합니다.
- Azure AD B2C 테넌트에서 사용자 흐름을 선택합니다.
- 정책(예: "B2C_1_SignupSignin")을 선택하여 엽니다.
- 사용자 특성을 선택한 다음 사용자 특성(예: "City")을 선택합니다.
- 저장을 선택합니다.
앱에 선택적 클레임 제공
애플리케이션 클레임은 애플리케이션에 반환되는 값입니다. 원하는 클레임을 포함하도록 사용자 흐름을 업데이트합니다.
- 정책(예: "B2C_1_SignupSignin")을 선택하여 엽니다.
- 애플리케이션 클레임을 선택합니다.
- 애플리케이션으로 다시 보낼 특성을 선택합니다(예: "도시").
- 저장을 선택합니다.
사용자 특성 입력 유형 구성
정책(예: "B2C_1_SignupSignin")을 선택하여 엽니다.
페이지 레이아웃을 선택합니다.
로컬 계정 등록 페이지를 선택합니다.
사용자 특성 아래에서 도시를 선택합니다.
- 선택적 드롭다운에서 아니요를 선택합니다.
- 사용자 입력 유형에서 TextBox와 같은 현재 사용자 입력 유형을 선택하여 사용자 입력 형식 편집기 창을 엽니다.
- 사용자 입력 형식 드롭다운에서 DropdownSingleSelect를 선택합니다.
- 텍스트 및 값에 특성에 대한 응답 집합을 구성하는 텍스트 및 값 쌍을 입력합니다. 텍스트는 흐름에 대한 웹 인터페이스에 표시되고 선택한 텍스트에 대한 값은 Azure AD B2C에 저장됩니다. 선택 사항: "위로/아래로 이동" 단추를 사용하여 드롭다운 항목의 순서를 다시 지정합니다.
확인선택합니다. 선택 사항: "위로/아래로 이동" 단추를 사용하여 등록 페이지에서 사용자 특성의 순서를 다시 지정합니다.
저장을 선택합니다.
지역화된 컬렉션을 사용하여 값 목록 제공
도시 특성에 대한 값의 집합 목록을 제공하려면 다음을 수행합니다.
- 사용자 흐름에서 언어 사용자 지정 사용
- 정책(예: "B2C_1_SignupSignin")을 선택하여 엽니다.
- 사용자 흐름에 대한 언어 페이지에서 사용자 지정하려는 언어를 선택합니다.
- 페이지 수준 리소스 파일에서 로컬 계정 등록 페이지를 선택합니다.
- 기본값 다운로드(또는 이전에 이 언어를 편집한 경우 재정의 다운로드)를 선택합니다.
-
LocalizedCollections
특성을 만듭니다.
이 LocalizedCollections
배열은 쌍의 Name
Value
배열입니다. 항목의 순서는 표시되는 순서입니다.
-
ElementId
는 이LocalizedCollections
특성이 응답인 사용자 특성입니다. -
Name
는 사용자에게 표시되는 값입니다. -
Value
는 이 옵션이 선택될 때 클레임에 반환된 항목입니다.
{
"LocalizedStrings": [...],
"LocalizedCollections": [
{
"ElementType": "ClaimType",
"ElementId": "city",
"TargetCollection": "Restriction",
"Override": true,
"Items": [
{
"Name": "Berlin",
"Value": "Berlin"
},
{
"Name": "London",
"Value": "London"
},
{
"Name": "Seattle",
"Value": "Seattle"
}
]
}
]
}
변경 내용 업로드
- JSON 파일의 변경 내용을 완료한 후 B2C 테넌트로 돌아갑니다.
- 사용자 흐름을 선택하고 정책(예: "B2C_1_SignupSignin")을 선택하여 엽니다.
- 언어를 선택합니다.
- 번역하려는 언어를 선택합니다.
- 페이지 수준 리소스 파일에서 로컬 계정 등록 페이지를 선택합니다.
- 폴더 아이콘을 선택하고 업로드할 JSON 파일을 선택합니다. 변경 내용이 자동으로 사용자 흐름에 저장됩니다.
사용자 흐름 테스트
- 정책(예: "B2C_1_SignupSignin")을 선택하여 엽니다.
- 정책을 테스트하려면 사용자 흐름 실행을 선택합니다.
-
애플리케이션의 경우 이전에 등록한 testapp1이라는 웹 애플리케이션을 선택합니다.
회신 URL에는
https://jwt.ms
가 표시되어야 합니다. - 사용자 흐름 실행 선택
개요
등록 또는 로그인 사용자 경험을 사용하여 사용자로부터 초기 데이터를 수집할 수 있습니다. 나중에 프로필 편집 사용자 경험을 사용하여 더 많은 클레임을 수집할 수 있습니다. Azure AD B2C는 대화형으로 사용자로부터 직접 정보를 수집할 때마다 자체 어설션된 기술 프로필을 사용합니다. 이 샘플에서는 다음을 수행합니다.
- "도시" 클레임을 정의합니다.
- 사용자에게 도시를 요청합니다.
- Azure AD B2C 디렉터리의 사용자 프로필에 도시를 유지합니다.
- 각 로그인의 Azure AD B2C 디렉터리에서 도시 클레임을 읽습니다.
- 로그인 또는 등록 후 신뢰 당사자 애플리케이션으로 도시를 반환합니다.
클레임 정의
클레임은 Azure AD B2C 정책 실행 중에 데이터의 임시 스토리지를 제공합니다. 클레임 스키마는 클레임을 선언하는 위치입니다. 클레임을 정의하는 데 사용되는 요소는 다음과 같습니다.
- DisplayName - 사용자 연결 레이블을 정의하는 문자열입니다.
- DataType - 클레임의 형식입니다.
- UserHelpText - 사용자가 필요한 사항을 이해하는 데 도움이 됩니다.
- UserInputType - 입력란, 라디오 선택, 드롭다운 목록 또는 여러 선택 항목과 같은 입력 컨트롤의 형식입니다.
정책의 확장 파일을 엽니다. 예: SocialAndLocalAccounts/
TrustFrameworkExtensions.xml
.
- BuildingBlocks 요소를 검색합니다. 요소가 없으면 추가합니다.
- ClaimsSchema 요소를 찾습니다. 요소가 없으면 추가합니다.
- ClaimsSchema 요소에 city 클레임을 추가합니다.
<!--
<BuildingBlocks>
<ClaimsSchema> -->
<ClaimType Id="city">
<DisplayName>City where you work</DisplayName>
<DataType>string</DataType>
<UserInputType>DropdownSingleSelect</UserInputType>
<Restriction>
<Enumeration Text="Berlin" Value="berlin" />
<Enumeration Text="London" Value="london" />
<Enumeration Text="Seattle" Value="seattle" />
</Restriction>
</ClaimType>
<!--
</ClaimsSchema>
</BuildingBlocks>-->
페이지에 처음 로드될 때 기본적으로 선택되도록 요소에 Enumeration
특성을 포함합니다. 예를 들어 London 항목을 미리 선택하려면 다음 예제로 요소를 변경 Enumeration
합니다.
<Restriction>
<Enumeration Text="Berlin" Value="berlin" />
<Enumeration Text="London" Value="london" SelectByDefault="true" />
<Enumeration Text="Seattle" Value="seattle" />
</Restriction>
사용자 인터페이스에 클레임 추가
다음 기술 프로필은 사용자가 입력을 제공해야 할 때 호출되는 자체 보증입니다.
- LocalAccountSignUpWithLogonEmail - 로컬 계정 등록 흐름입니다.
- SelfAsserted-Social - 페더레이션 계정 처음 사용자 로그인.
- SelfAsserted-ProfileUpdate - 프로필 흐름을 편집합니다.
회원가입 시 도시 클레임을 수집하려면, LocalAccountSignUpWithLogonEmail
기술 프로필에 출력 클레임으로 추가해야 합니다. 확장 파일에서 이 기술 프로필을 재정의합니다. 출력 클레임의 전체 목록을 지정하여 클레임이 화면에 표시되는 순서를 제어합니다.
ClaimsProviders 요소를 찾습니다. 다음과 같이 새 ClaimsProviders를 추가합니다.
<ClaimsProvider>
<DisplayName>Local Account</DisplayName>
<TechnicalProfiles>
<!--Local account sign-up page-->
<TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="Verified.Email" Required="true" />
<OutputClaim ClaimTypeReferenceId="newPassword" Required="true" />
<OutputClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
<OutputClaim ClaimTypeReferenceId="displayName" />
<OutputClaim ClaimTypeReferenceId="givenName" />
<OutputClaim ClaimTypeReferenceId="surName" />
<OutputClaim ClaimTypeReferenceId="city"/>
</OutputClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
페더레이션된 계정으로 처음 로그인한 후 도시 클레임을 수집하려면 기술 프로필에 출력 클레임 SelfAsserted-Social
으로 추가해야 합니다. 로컬 및 페더레이션 계정 사용자가 나중에 프로필 데이터를 편집할 수 있도록 기술 프로필에 입력 및 출력 클레임을 SelfAsserted-ProfileUpdate
추가합니다. 확장 파일에서 이러한 기술 프로필을 재정의합니다. 출력 클레임의 전체 목록을 지정하여 클레임이 화면에 표시되는 순서를 제어합니다.
ClaimsProviders 요소를 찾습니다. 다음과 같이 새 ClaimsProviders를 추가합니다.
<ClaimsProvider>
<DisplayName>Self Asserted</DisplayName>
<TechnicalProfiles>
<!--Federated account first-time sign-in page-->
<TechnicalProfile Id="SelfAsserted-Social">
<InputClaims>
<InputClaim ClaimTypeReferenceId="city" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="displayName"/>
<OutputClaim ClaimTypeReferenceId="givenName"/>
<OutputClaim ClaimTypeReferenceId="surname"/>
<OutputClaim ClaimTypeReferenceId="city"/>
</OutputClaims>
</TechnicalProfile>
<!--Edit profile page-->
<TechnicalProfile Id="SelfAsserted-ProfileUpdate">
<InputClaims>
<InputClaim ClaimTypeReferenceId="city" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="displayName"/>
<OutputClaim ClaimTypeReferenceId="givenName" />
<OutputClaim ClaimTypeReferenceId="surname" />
<OutputClaim ClaimTypeReferenceId="city"/>
</OutputClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
클레임 읽기 및 쓰기
다음 기술 프로필은 Microsoft Entra ID에 데이터를 읽고 쓰는 Active Directory 기술 프로필입니다.
사용자 프로필에 데이터를 쓰려면 PersistedClaims
를 사용하고, 해당 Active Directory 기술 프로필 내에서 사용자 프로필의 데이터를 읽으려면 OutputClaims
를 사용합니다.
확장 파일에서 이러한 기술 프로필을 재정의합니다. ClaimsProviders 요소를 찾습니다. 다음과 같이 새 ClaimsProviders를 추가합니다.
<ClaimsProvider>
<DisplayName>Azure Active Directory</DisplayName>
<TechnicalProfiles>
<!-- Write data during a local account sign-up flow. -->
<TechnicalProfile Id="AAD-UserWriteUsingLogonEmail">
<PersistedClaims>
<PersistedClaim ClaimTypeReferenceId="city"/>
</PersistedClaims>
</TechnicalProfile>
<!-- Write data during a federated account first-time sign-in flow. -->
<TechnicalProfile Id="AAD-UserWriteUsingAlternativeSecurityId">
<PersistedClaims>
<PersistedClaim ClaimTypeReferenceId="city"/>
</PersistedClaims>
</TechnicalProfile>
<!-- Write data during edit profile flow. -->
<TechnicalProfile Id="AAD-UserWriteProfileUsingObjectId">
<PersistedClaims>
<PersistedClaim ClaimTypeReferenceId="city"/>
</PersistedClaims>
</TechnicalProfile>
<!-- Read data after user resets the password. -->
<TechnicalProfile Id="AAD-UserReadUsingEmailAddress">
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="city" />
</OutputClaims>
</TechnicalProfile>
<!-- Read data after user authenticates with a local account. -->
<TechnicalProfile Id="AAD-UserReadUsingObjectId">
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="city" />
</OutputClaims>
</TechnicalProfile>
<!-- Read data after user authenticates with a federated account. -->
<TechnicalProfile Id="AAD-UserReadUsingAlternativeSecurityId">
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="city" />
</OutputClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
토큰에 클레임 포함
도시 클레임을 신뢰 당사자 애플리케이션으로 다시 반환하려면 파일에 출력 클레임을 SocialAndLocalAccounts/
SignUpOrSignIn.xml
추가합니다. 출력 클레임은 성공적인 사용자 경험 후에 토큰에 추가되고 애플리케이션으로 전송됩니다. 신뢰 당사자 섹션 내의 기술 프로필 요소를 수정하여 도시를 출력 클레임으로 추가합니다.
<RelyingParty>
<DefaultUserJourney ReferenceId="SignUpOrSignIn" />
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="OpenIdConnect" />
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="displayName" />
<OutputClaim ClaimTypeReferenceId="givenName" />
<OutputClaim ClaimTypeReferenceId="surname" />
<OutputClaim ClaimTypeReferenceId="email" />
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
<OutputClaim ClaimTypeReferenceId="identityProvider" />
<OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
<OutputClaim ClaimTypeReferenceId="city" DefaultValue="" />
</OutputClaims>
<SubjectNamingInfo ClaimType="sub" />
</TechnicalProfile>
</RelyingParty>
업데이트된 사용자 지정 정책 업로드 및 테스트
- 여러 테넌트에 액세스할 수 있는 경우 상단 메뉴의 설정 아이콘을 선택하여 디렉터리 + 구독 메뉴에서 Azure AD B2C 테넌트로 전환합니다.
- Azure AD B2C를 검색하고 선택합니다.
- 정책에서 ID 환경 프레임워크를 선택합니다.
- 사용자 지정 정책 업로드를 선택합니다.
- 이전에 변경한 정책 파일을 업로드합니다.
사용자 지정 정책 테스트
- 신뢰 당사자 정책을 선택하세요, 예를 들어
B2C_1A_signup_signin
. -
애플리케이션의 경우 이전에 등록한 웹 애플리케이션을 선택합니다.
회신 URL에는
https://jwt.ms
가 표시되어야 합니다. - 지금 실행 단추를 선택합니다.
- 등록 또는 로그인 페이지에서 지금 등록 을 선택하여 등록합니다. 도시 이름을 포함한 사용자 정보 입력을 완료한 다음 만들기를 선택합니다. 반환된 토큰의 내용이 표시됩니다.
등록 화면은 다음 스크린샷과 유사합니다.
애플리케이션으로 다시 전송되는 토큰에는 클레임이 city
포함됩니다.
{
"typ": "JWT",
"alg": "RS256",
"kid": "X5eXk4xyojNFum1kl2Ytv8dlNP4-c57dO6QGTVBwaNk"
}.{
"exp": 1583500140,
"nbf": 1583496540,
"ver": "1.0",
"iss": "https://contoso.b2clogin.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/",
"aud": "00001111-aaaa-2222-bbbb-3333cccc4444",
"acr": "b2c_1a_signup_signin",
"nonce": "defaultNonce",
"iat": 1583496540,
"auth_time": 1583496540,
"name": "Emily Smith",
"email": "joe@outlook.com",
"given_name": "Emily",
"family_name": "Smith",
"city": "Berlin"
...
}
[선택 사항] UI 지역화
Azure AD B2C를 사용하면 정책을 다른 언어로 수용할 수 있습니다. 자세한 내용은 언어 환경을 사용자 지정하는 방법을 알아봅니다. 등록 페이지를 지역화하려면 지원되는 언어 목록을 설정하고 언어별 레이블을 제공합니다.
다음 예제에서는 영어와 스페인어에 대한 도시 목록을 제공하는 방법을 보여 줍니다. 둘 다 영어와 스페인어 항목 목록을 사용하여 클레임 Restriction
컬렉션을 설정합니다.
SelectByDefault는 페이지가 처음 로드될 때 기본적으로 선택된 항목을 만듭니다.
<!--
<BuildingBlocks>-->
<Localization Enabled="true">
<SupportedLanguages DefaultLanguage="en" MergeBehavior="Append">
<SupportedLanguage>en</SupportedLanguage>
<SupportedLanguage>es</SupportedLanguage>
</SupportedLanguages>
<LocalizedResources Id="api.localaccountsignup.en">
<LocalizedCollections>
<LocalizedCollection ElementType="ClaimType" ElementId="city" TargetCollection="Restriction">
<Item Text="Berlin" Value="Berlin"></Item>
<Item Text="London" Value="London" SelectByDefault="true"></Item>
<Item Text="Seattle" Value="Seattle"></Item>
</LocalizedCollection>
</LocalizedCollections>
</LocalizedResources>
<LocalizedResources Id="api.localaccountsignup.es">
<LocalizedCollections>
<LocalizedCollection ElementType="ClaimType" ElementId="city" TargetCollection="Restriction">
<Item Text="Berlina" Value="Berlin"></Item>
<Item Text="Londres" Value="London" SelectByDefault="true"></Item>
<Item Text="Seattle" Value="Seattle"></Item>
</LocalizedCollection>
</LocalizedCollections>
</LocalizedResources>
</Localization>
<!--
</BuildingBlocks>-->
지역화 요소를 추가한 후 지역화를 사용하여 콘텐츠 정의를 편집합니다. 다음 예제에서는 영어(en) 및 스페인어(es) 사용자 지정 지역화된 리소스가 등록 페이지에 추가됩니다.
<!--
<BuildingBlocks>
<ContentDefinitions> -->
<ContentDefinition Id="api.localaccountsignup">
<LocalizedResourcesReferences MergeBehavior="Prepend">
<LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.localaccountsignup.en" />
<LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.localaccountsignup.es" />
</LocalizedResourcesReferences>
</ContentDefinition>
<!--
</ContentDefinitions>
</BuildingBlocks>-->
다음 단계
- IEF 참조의 ClaimsSchema 요소에 대해 자세히 알아봅니다.
- Azure AD B2C에서 사용자 지정 특성을 사용하는 방법을 알아봅니다.