İlk Azure Active Directory B2C özel ilkenizi yazın - Merhaba Dünya!

Uygulamanızda, kullanıcıların kaydolmasını, oturum açmasını veya profillerini yönetmesini sağlayan kullanıcı akışlarını kullanabilirsiniz. Kullanıcı akışları tüm iş gereksinimlerinizi kapsamadığında özel ilkeler kullanabilirsiniz.

Özel ilkeler yazmak için önceden oluşturulmuş özel ilke başlangıç paketini kullanabilirsiniz ancak özel ilkenin nasıl derlenmiş olduğunu anlamanız önemlidir. Bu makalede, ilk özel ilkenizi sıfırdan oluşturmayı öğreneceksiniz.

Ön koşullar

Dekont

Bu makale, Azure Active Directory B2C'de kendi özel ilkelerinizi oluşturma ve çalıştırma nasıl yapılır kılavuzu serisinin bir parçasıdır. Bu seriyi ilk makaleden başlatmanızı öneririz.

1. Adım - İmzalama ve şifreleme anahtarlarını yapılandırma

Henüz yapmadıysanız aşağıdaki şifreleme anahtarlarını oluşturun. Aşağıdaki adımları otomatikleştirmek için IEF Kurulum Uygulaması'nı ziyaret edin ve yönergeleri izleyin:

  1. İmzalama anahtarını oluşturmak için Kimlik Deneyimi Çerçevesi uygulamaları için imzalama ve şifreleme anahtarları ekleme'deki adımları kullanın.

  2. Şifreleme anahtarını oluşturmak için Kimlik Deneyimi Çerçevesi uygulamaları için imzalama ve şifreleme anahtarları ekleme'deki adımları kullanın.

2. Adım - Özel ilke dosyasını oluşturma

  1. VS Code'da dosyasını ContosoCustomPolicy.XMLoluşturun ve açın.

  2. ContosoCustomPolicy.XML Dosyasına aşağıdaki kodu ekleyin:

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

    değerini kiracı adınızın alt etki alanı bölümüyle (örneğincontoso) değiştirinyourtenant. Kiracı adınızı alma hakkında bilgi edinin.

    XML öğeleri, ilke dosyasının en üst düzey TrustFrameworkPolicy öğesini ilke kimliği ve kiracı adıyla tanımlar. TrustFrameworkPolicy öğesi, bu seride kullanacağınız diğer XML öğelerini içerir.

  3. Bir talep bildirmek için dosyanın bölümüne ContosoCustomPolicy.XML aşağıdaki kodu BuildingBlocks ekleyin:

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

    Talep, değişken gibidir. Talebin bildirimi, talebin veri türünü de gösterir.

  4. ClaimsProviders Dosyanın bölümünde ContosoCustomPolicy.XML aşağıdaki kodu ekleyin:

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

    Bir JWT Belirteci Vereni bildirdik. CryptographicKeys bölümünde, 1. adımda imzalama ve şifreleme anahtarlarını yapılandırmak için farklı adlar kullandıysanız, için doğru değeri kullandığınızdan StorageReferenceIdemin olun.

  5. UserJourneys Dosyanın bölümünde ContosoCustomPolicy.XML aşağıdaki kodu ekleyin:

      <UserJourney Id="HelloWorldJourney">
        <OrchestrationSteps>
          <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
        </OrchestrationSteps>
      </UserJourney>
    

    Bir UserJourney ekledik. Kullanıcı yolculuğu, Azure AD B2C bir isteği işlerken son kullanıcının geçtiği iş mantığını belirtir. Bu kullanıcı yolculuğunda, bir sonraki adımda tanımlayabileceğiniz taleplerle JTW belirteci veren tek bir adım vardır.

  6. RelyingParty Dosyanın bölümünde ContosoCustomPolicy.XML aşağıdaki kodu ekleyin:

      <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 bölümü, ilkenizin giriş noktasıdır. Yürütülecek UserJourney'yi ve ilke çalıştırıldığında döndürülen belirtece dahil edilecek talepleri belirtir.

2. adımı tamamladıktan sonra dosya ContosoCustomPolicy.XML aşağıdaki koda benzer görünmelidir:

    <?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. Adım - Özel ilke dosyasını karşıya yükleme

  1. Azure Portal oturum açın.
  2. Birden çok kiracıya erişiminiz varsa, Dizinler + abonelikler menüsünden Azure AD B2C kiracınıza geçmek için üstteki menüden Ayarlar simgesini seçin.
  3. Azure portalında Azure AD B2C'yi arayın ve seçin.
  4. Soldaki menüde, İlkeler'in altında Kimlik Deneyimi Çerçevesi'ni seçin.
  5. Özel ilkeyi karşıya yükle'yi seçin, seç'e göz atın ve dosyayı karşıya yükleyinContosoCustomPolicy.XML.

Dosyayı karşıya yükledikten sonra, Azure AD B2C ön ekini B2C_1A_ekler, böylece adlar B2C_1A_CONTOSOCUSTOMPOLICY benzer görünür.

4. Adım - Özel ilkeyi test edin

  1. Özel ilkeler'in altında B2C_1A_CONTOSOCUSTOMPOLICY'ı seçin.
  2. Özel ilkenin genel bakış sayfasında Uygulamayı seçin için daha önce kaydettiğiniz webapp1 gibi web uygulamasını seçin. Yanıt URL'si seç değerinin olarak ayarlandığındanhttps://jwt.ms emin olun.
  3. Şimdi çalıştır düğmesini seçin.

İlke yürütmeyi tamamladıktan sonra adresine yönlendirilirsiniz https://jwt.msve kodu çözülen bir JWT belirteci görürsünüz. Aşağıdaki JWT belirteci kod parçacığına benzer:

    {
      "typ": "JWT",
      "alg": "RS256",
      "kid": "pxLOMWFg...."
    }.{
      ...
      "sub": "abcd-1234-efgh-5678-ijkl-etc.",
      ...
      "acr": "b2c_1a_contosocustompolicy",
      ...
      "message": "Hello World!"
    }.[Signature]

message bölümünde çıkış talepleri olarak ayarladığımız ve sub taleplerineRelyingParty dikkat edin.

Sonraki adımlar

Bu makalede, Azure AD B2C özel ilkesine dahil edilen dört bölümü öğrendiniz ve kullandınız. Bu bölümler kök öğesi alt öğe TrustFrameworkPolicy olarak eklenir:

  • BuildingBlocks
  • ClaimsProviders
  • UserJourneys
  • RelyingParty

Ardından şunları öğrenin: