첫 번째 Azure Active Directory B2C 사용자 지정 정책 작성 - Hello World!
애플리케이션에는 사용자가 자신의 프로필을 등록, 로그인 또는 관리할 수 있도록 하는 사용자 흐름을 사용할 수 있습니다. 사용자 흐름이 모든 비즈니스 관련 요구 사항을 충족하지 않는 경우 사용자 지정 정책을 사용할 수 있습니다.
미리 만들어진 사용자 지정 정책 스타터 팩을 사용하여 사용자 지정 정책을 작성할 수 있지만 사용자 지정 정책이 빌드되는 방식을 이해하는 것이 중요합니다. 이 문서에서는 첫 번째 사용자 지정 정책을 처음부터 만드는 방법을 알아봅니다.
필수 조건
Azure 구독에 연결된 Azure AD B2C 테넌트가 아직 없으면 만듭니다.
웹 애플리케이션을 등록하고 ID 토큰 암시적 부여를 사용하도록 설정합니다. 리디렉션 URI의 경우 https://jwt.ms를 사용합니다.
컴퓨터에 VS Code(Visual Studio Code)가 설치되어 있어야 합니다.
참고 항목
이 문서는 Azure Active Directory B2C 방법 가이드 시리즈에서 사용자 고유의 사용자 지정 정책 만들기 및 실행의 일부입니다. 이 시리즈는 첫 번째 문서부터 시작하는 것이 좋습니다.
1단계 - 서명 및 암호화 키 구성
아직 수행하지 않은 경우 다음 암호화 키를 만듭니다. 아래 연습을 자동화하려면 IEF 설치 앱을 방문하여 지침을 따르세요.
Identity Experience Framework 애플리케이션에 대한 서명 및 암호화 키 추가의 단계를 사용하여 서명 키를 만듭니다.
Identity Experience Framework 애플리케이션에 대한 서명 및 암호화 키 추가의 단계를 사용하여 암호화 키를 만듭니다.
2단계 - 사용자 지정 정책 파일 빌드
VS Code에서
ContosoCustomPolicy.XML
파일을 만들고 엽니다.ContosoCustomPolicy.XML
파일에서 다음 코드를 추가합니다.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="yourtenant.onmicrosoft.com" PolicyId="B2C_1A_ContosoCustomPolicy" PublicPolicyUri="http://yourtenant.onmicrosoft.com/B2C_1A_ContosoCustomPolicy"> <BuildingBlocks> <!-- Building Blocks Here--> </BuildingBlocks> <ClaimsProviders> <!-- Claims Providers Here--> </ClaimsProviders> <UserJourneys> <!-- User Journeys Here--> </UserJourneys> <RelyingParty> <!-- Relying Party Here that's your policy’s entry point Specify the User Journey to execute Specify the claims to include in the token that is returned when the policy runs --> </RelyingParty> </TrustFrameworkPolicy>
yourtenant
를 테넌트 이름의 하위 도메인 부분(예:contoso
)으로 바꿉니다. 테넌트 이름 가져오기 방법에 대해 알아보세요.XML 요소는 정책 ID 및 테넌트 이름을 사용하여 정책 파일의 최상위
TrustFrameworkPolicy
요소를 정의합니다. TrustFrameworkPolicy 요소에는 이 시리즈에서 사용할 다른 XML 요소가 포함되어 있습니다.클레임을 선언하려면
ContosoCustomPolicy.XML
파일의BuildingBlocks
섹션에 다음 코드를 추가합니다.<ClaimsSchema> <ClaimType Id="objectId"> <DisplayName>unique object Id for subject of the claims being returned</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="message"> <DisplayName>Will hold Hello World message</DisplayName> <DataType>string</DataType> </ClaimType> </ClaimsSchema>
ContosoCustomPolicy.XML
파일의ClaimsProviders
섹션에서 다음 코드를 추가합니다.<ClaimsProvider> <DisplayName>Token Issuer</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="JwtIssuer"> <DisplayName>JWT Issuer</DisplayName> <Protocol Name="None" /> <OutputTokenFormat>JWT</OutputTokenFormat> <Metadata> <Item Key="client_id">{service:te}</Item> <Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item> <Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item> </Metadata> <CryptographicKeys> <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" /> <Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer" /> </CryptographicKeys> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> <ClaimsProvider> <!-- The technical profile(s) defined in this section is required by the framework to be included in all custom policies. --> <DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13"> <DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName> <Protocol Name="None" /> <Metadata> <Item Key="url">{service:te}</Item> </Metadata> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
JWT 토큰 발급자를 선언했습니다.
CryptographicKeys
섹션에서 다른 이름을 사용하여 1단계에서 서명 및 암호화 키를 구성한 경우StorageReferenceId
에 올바른 값을 사용했는지 확인합니다.ContosoCustomPolicy.XML
파일의UserJourneys
섹션에서 다음 코드를 추가합니다.<UserJourney Id="HelloWorldJourney"> <OrchestrationSteps> <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps> </UserJourney>
UserJourney를 추가했습니다. 사용자 경험은 Azure AD B2C가 요청을 처리할 때 최종 사용자가 거쳐야 하는 비즈니스 논리를 지정합니다. 이 사용자 경험에는 다음 단계에서 정의할 클레임으로 JTW 토큰을 발급하는 단계가 하나뿐입니다.
ContosoCustomPolicy.XML
파일의RelyingParty
섹션에서 다음 코드를 추가합니다.<DefaultUserJourney ReferenceId="HelloWorldJourney"/> <TechnicalProfile Id="HelloWorldPolicyProfile"> <DisplayName>Hello World Policy Profile</DisplayName> <Protocol Name="OpenIdConnect" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/> <OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/> </OutputClaims> <SubjectNamingInfo ClaimType="sub" /> </TechnicalProfile>
RelyingParty 섹션은 정책의 진입점입니다. 실행할 UserJourney 및 정책이 실행되면 반환되는 토큰에 포함할 클레임을 지정합니다.
2단계를 완료한 후 ContosoCustomPolicy.XML
파일은 다음 코드와 유사해야 합니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="Contosob2c2233.onmicrosoft.com" PolicyId="B2C_1A_ContosoCustomPolicy" PublicPolicyUri="http://Contosob2c2233.onmicrosoft.com/B2C_1A_ContosoCustomPolicy">
<BuildingBlocks>
<ClaimsSchema>
<ClaimType Id="objectId">
<DisplayName>unique object Id for subject of the claims being returned</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="message">
<DisplayName>Will hold Hello World message</DisplayName>
<DataType>string</DataType>
</ClaimType>
</ClaimsSchema>
</BuildingBlocks>
<ClaimsProviders><!--Claims Providers Here-->
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="JwtIssuer">
<DisplayName>JWT Issuer</DisplayName>
<Protocol Name="None"/>
<OutputTokenFormat>JWT</OutputTokenFormat>
<Metadata>
<Item Key="client_id">{service:te}</Item>
<Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item>
<Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item>
</Metadata>
<CryptographicKeys>
<Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer"/>
<Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer"/>
</CryptographicKeys>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
<ClaimsProvider>
<DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13">
<DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName>
<Protocol Name="None" />
<Metadata>
<Item Key="url">{service:te}</Item>
</Metadata>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
</ClaimsProviders>
<UserJourneys>
<UserJourney Id="HelloWorldJourney">
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
</OrchestrationSteps>
</UserJourney>
</UserJourneys>
<RelyingParty><!--
Relying Party Here that's your policy’s entry point
Specify the User Journey to execute
Specify the claims to include in the token that is returned when the policy runs
-->
<DefaultUserJourney ReferenceId="HelloWorldJourney"/>
<TechnicalProfile Id="HelloWorldPolicyProfile">
<DisplayName>Hello World Policy Profile</DisplayName>
<Protocol Name="OpenIdConnect"/>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/>
<OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/>
</OutputClaims>
<SubjectNamingInfo ClaimType="sub"/>
</TechnicalProfile>
</RelyingParty>
</TrustFrameworkPolicy>
3단계 - 사용자 지정 정책 파일 업로드
- Azure Portal에 로그인합니다.
- 여러 테넌트에 액세스할 수 있는 경우 상단 메뉴의 설정 아이콘을 선택하여 디렉터리 + 구독 메뉴에서 Azure AD B2C 테넌트로 전환합니다.
- Azure Portal에서 Azure AD B2C를 검색하고 선택합니다.
- 왼쪽 메뉴의 정책 아래에서 Identity Experience Framework를 선택합니다.
- 사용자 지정 정책 업로드를 선택하고 찾아보기를 선택한 다음,
ContosoCustomPolicy.XML
파일을 업로드합니다.
파일을 업로드한 후 Azure AD B2C는 접두사 B2C_1A_
를 추가하므로 이름은 B2C_1A_CONTOSOCUSTOMPOLICY와 비슷합니다.
4단계 - 사용자 지정 정책 테스트
- 사용자 지정 정책에서 B2C_1A_CONTOSOCUSTOMPOLICY를 선택합니다.
- 사용자 지정 정책의 개요 페이지에 있는 애플리케이션 선택에서 이전에 등록한 webapp1과 같은 웹 애플리케이션을 선택합니다. 회신 URL 선택 값이
https://jwt.ms
로 설정되어 있는지 확인합니다. - 지금 실행 단추를 선택합니다.
정책 실행이 완료되면 https://jwt.ms
로 리디렉션되고 디코딩된 JWT 토큰이 표시됩니다. 다음 JWT 토큰 코드 조각과 유사합니다.
{
"typ": "JWT",
"alg": "RS256",
"kid": "pxLOMWFg...."
}.{
...
"sub": "abcd-1234-efgh-5678-ijkl-etc.",
...
"acr": "b2c_1a_contosocustompolicy",
...
"message": "Hello World!"
}.[Signature]
RelyingParty
섹션에서 출력 클레임으로 설정한 message
및 sub
클레임을 확인합니다.
다음 단계
이 문서에서는 Azure AD B2C 사용자 지정 정책에 포함된 네 가지 섹션을 학습하고 사용했습니다. 이러한 섹션은 TrustFrameworkPolicy
루트 요소에 자식 요소로 추가됩니다.
- BuildingBlocks
- ClaimsProviders
- UserJourneys
- RelyingParty
다음으로, 다음을 알아봅니다.
사용자 지정 정책 클레임 개요 정보.
사용자 지정 정책 클레임을 선언하는 방법.
사용자 지정 정책 클레임 데이터 형식 정보.
사용자 지정 정책 사용자 입력 형식 정보.
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기