Azure Active Directory B2C özel ilkesini kullanarak kullanıcı yolculuğunda dallanma oluşturma

Aynı uygulamanın farklı kullanıcıları, özel ilkedeki verilerin değerlerine bağlı olarak farklı kullanıcı yolculuklarını izleyebilir. Azure Active Directory B2C (Azure AD B2C) özel ilkeleri, bu özelliği elde etmek için bir teknik profili koşullu olarak etkinleştirmenize veya devre dışı bırakmanıza olanak tanır. Örneğin, Azure AD B2C özel ilkesini kullanarak kullanıcı girişlerini doğrulama bölümünde accountType talebi değerine göre bir doğrulama teknik profili çalıştırıp çalıştırmayacağımızı belirlemek için bir Precondition kullandık.

Teknik profil, teknik bir EnabledForUserJourneys profilin çalıştırılıp çalıştırılmayacağını belirtmenize olanak sağlayan bir öğe de sağlar. EnabledForUserJourneys öğesi OnClaimsExistence dahil olmak üzere beş değerden birini içerir. Bu değer, teknik profilin yalnızca teknik profilde belirtilen belirli bir talep mevcut olduğunda çalıştırılması gerektiğini belirtir. Teknik profilin EnabledForUserJourneys öğesi hakkında daha fazla bilgi edinin.

Senaryoya genel bakış

Kullanıcı girişlerini Azure AD B2C özel ilkesi kullanarak doğrulama makalesinde, kullanıcı ayrıntılarını tek bir ekrana ekler. Bu makalede, bir kullanıcının önce kendi hesap türünü (Contoso Çalışan Hesabı veya Kişisel Hesap) seçmesi gerekir. Contoso Çalışan Hesabı'nı seçen bir kullanıcı daha fazla ayrıntı sağlamaya devam edebilir. Ancak, Kişisel Hesap'ı seçen bir kullanıcının daha fazla ayrıntı sağlamaya devam etmeden önce geçerli bir davet erişim kodu sağlaması gerekir. Bu nedenle, Kişisel Hesap hesabı türünü kullanan kullanıcılar yolculuklarını tamamlamak için ek bir kullanıcı arabirimi görür.

A flowchart of branching in user journey.

Bu makalede, bir talep değerine göre farklı kullanıcı deneyimleri oluşturmak için bir teknik profilin içindeki öğesini kullanmayı EnabledForUserJourneys öğ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 - Beyanları bildirme

Kişisel Hesap'ı seçen bir kullanıcının geçerli bir erişim kodu sağlaması gerekir. Bu nedenle, bu değeri tutmak için bir talep gerekir:

  1. VS Code'da dosyayı açın ContosoCustomPolicy.XML .

  2. ClaimsSchema bölümünde, aşağıdaki kodu kullanarak accessCode ve isValidAccessCode taleplerini bildirin:

        <ClaimType Id="accessCode">
            <DisplayName>Access Code</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>Enter your invitation access code.</UserHelpText>
            <UserInputType>Password</UserInputType>
            <Restriction>
                <Pattern RegularExpression="[0-9][0-9][0-9][0-9][0-9]" HelpText="Please enter your invitation access code. It's a 5-digit number, something like 95765"/>
            </Restriction>
        </ClaimType>
        <ClaimType Id="isValidAccessCode">
            <DataType>boolean</DataType>
        </ClaimType>
    

2. Adım - Talep dönüştürmelerini tanımlama

ClaimsTransformations öğesini bulun ve aşağıdaki talep dönüştürmelerini ekleyin:

    <!---<ClaimsTransformations>-->
        <ClaimsTransformation Id="CheckIfIsValidAccessCode" TransformationMethod="CompareClaimToValue">
            <InputClaims>
                <InputClaim ClaimTypeReferenceId="accessCode" TransformationClaimType="inputClaim1"/>
            </InputClaims>
            <InputParameters>
                <InputParameter Id="compareTo" DataType="string" Value="88888"/>
                <InputParameter Id="operator" DataType="string" Value="equal"/>
                <InputParameter Id="ignoreCase" DataType="string" Value="true"/>
            </InputParameters>
            <OutputClaims>
                <OutputClaim ClaimTypeReferenceId="isValidAccessCode" TransformationClaimType="outputClaim"/>
            </OutputClaims>
        </ClaimsTransformation>
        <ClaimsTransformation Id="ThrowIfIsNotValidAccessCode" TransformationMethod="AssertBooleanClaimIsEqualToValue">
            <InputClaims>
                <InputClaim ClaimTypeReferenceId="isValidAccessCode" TransformationClaimType="inputClaim"/>
            </InputClaims>
            <InputParameters>
                <InputParameter Id="valueToCompareTo" DataType="boolean" Value="true"/>
            </InputParameters>
        </ClaimsTransformation>
    <!---</ClaimsTransformations>-->

CheckIfIsValidAccessCode ve ThrowIfIsNotValidAccessCode olarak iki talep dönüştürmesi tanımladık. CheckIfIsValidAccessCode, kullanıcının erişim kodu girişini 88888 statik değeriyle karşılaştırmak için CompareClaimToValue dönüştürme yöntemini kullanır (test için bu değeri kullanalım) ve veya false isValidAccessCode talebi atar true. ThrowIfIsNotValidAccessCode , iki talebin iki boole değerinin eşit olup olmadığını denetler ve eşit değilse bir özel durum oluşturur.

3. Adım - Teknik profilleri yapılandırma veya güncelleştirme

Şimdi biri hesap türünü toplamak için diğeri de kullanıcıdan erişim kodu toplamak için olmak üzere iki yeni kendi kendine onaylanan teknik profile ihtiyacınız vardır. Ayrıca, 2. adımda tanımladığınız talep dönüştürmelerini yürüterek kullanıcının erişim kodunu doğrulamak için yeni bir talep dönüştürme türü teknik profiline de ihtiyacınız vardır. Hesap türünü kendi kendine onaylanan farklı bir teknik profilde topladığımıza göre, hesap türünü toplamasını önlemek için kendi kendine onaylanan teknik profili güncelleştirmemiz UserInformationCollector gerekir.

  1. ClaimsProviders öğesini bulun ve aşağıdaki kodu kullanarak yeni bir talep sağlayıcısı ekleyin:

        <!--<ClaimsProviders>-->
            <ClaimsProvider>
                <DisplayName>Technical Profiles to collect user's access code</DisplayName>
                <TechnicalProfiles>
                    <TechnicalProfile Id="AccessCodeInputCollector">
                        <DisplayName>Collect Access Code Input from user Technical Profile</DisplayName>
                        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                        <Metadata>
                            <Item Key="ContentDefinitionReferenceId">SelfAssertedContentDefinition</Item>
                            <Item Key="UserMessageIfClaimsTransformationBooleanValueIsNotEqual">The access code is invalid.</Item>
                            <Item Key="ClaimTypeOnWhichToEnable">accountType</Item>
                            <Item Key="ClaimValueOnWhichToEnable">personal</Item>
                        </Metadata>
                        <DisplayClaims>
                            <DisplayClaim ClaimTypeReferenceId="accessCode" Required="true"/>
                        </DisplayClaims>
                        <OutputClaims>
                            <OutputClaim ClaimTypeReferenceId="accessCode"/>
                        </OutputClaims>
                        <ValidationTechnicalProfiles>
                            <ValidationTechnicalProfile ReferenceId="CheckAccessCodeViaClaimsTransformationChecker"/>
                        </ValidationTechnicalProfiles>
                        <EnabledForUserJourneys>OnClaimsExistence</EnabledForUserJourneys>
                    </TechnicalProfile>
                    <TechnicalProfile Id="CheckAccessCodeViaClaimsTransformationChecker">
                        <DisplayName>A Claims Transformations to check user's access code validity</DisplayName>
                        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                        <OutputClaims>
                            <OutputClaim ClaimTypeReferenceId="isValidAccessCode"/>
                        </OutputClaims>
                        <OutputClaimsTransformations>
                            <OutputClaimsTransformation ReferenceId="CheckIfIsValidAccessCode"/>
                            <OutputClaimsTransformation ReferenceId="ThrowIfIsNotValidAccessCode"/>
                        </OutputClaimsTransformations>
                    </TechnicalProfile>
                </TechnicalProfiles>
            </ClaimsProvider>
        <!--</ClaimsProviders>-->
    

    AccessCodeInputCollector ve CheckAccessCodeViaClaimsTransformationChecker olarak iki teknik profil yapılandırdık. CheckAccessCodeViaClaimsTransformationChecker teknik profilini AccessCodeInputCollector teknik profili içinden doğrulama teknik profili olarak adlandırıyoruz. CheckAccessCodeViaClaimsTransformationChecker, 2. adımda tanımladığımız Talep Dönüştürmelerini yürüten Talep Dönüştürme teknik Profili türündedir.

    AccessCodeInputCollector , kullanıcıdan erişim kodu toplamak için kullanılan, Kendinden Onaylanan bir Teknik Profildir. OnClaimsExistence olarak ayarlanmış öğeyi içerirEnabledForUserJourneys. Öğesi Metadata , bu teknik profili etkinleştiren bir talep (accountType) ve değerini (kişisel) içerir.

  2. ClaimsProviders öğesini bulun ve aşağıdaki kodu kullanarak yeni bir talep sağlayıcısı ekleyin:

        <!--<ClaimsProviders>-->
            <ClaimsProvider>
                <DisplayName>Technical Profile to collect user's accountType</DisplayName>
                <TechnicalProfiles>
                    <TechnicalProfile Id="AccountTypeInputCollector">
                        <DisplayName>Collect User Input Technical Profile</DisplayName>
                        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                        <Metadata>
                            <Item Key="ContentDefinitionReferenceId">SelfAssertedContentDefinition</Item>
                        </Metadata>
                        <DisplayClaims>
                            <DisplayClaim ClaimTypeReferenceId="accountType" Required="true"/>
                        </DisplayClaims>
                        <OutputClaims>
                            <OutputClaim ClaimTypeReferenceId="accountType"/>
                        </OutputClaims>
                    </TechnicalProfile>
                </TechnicalProfiles>
            </ClaimsProvider>
        <!--</ClaimsProviders>-->
    

    Kullanıcının hesap türünü toplayan, kendi kendine onaylanan bir teknik profil AccountTypeInputCollectoryapılandırdık. Kendi kendine onaylanan teknik profilin etkinleştirilip etkinleştirilmeyeceğini belirleyen hesap türlerinin AccessCodeInputCollector değeridir.

  3. Kendi kendine onaylanan teknik profilin UserInformationCollector hesap türünü toplamasını önlemek için, kendi kendine onaylanan teknik profili bulun UserInformationCollector ve ardından:

    1. accountType Görünen talebi koleksiyondan <DisplayClaim ClaimTypeReferenceId="accountType" Required="true"/>DisplayClaims kaldırın.

    2. accountType Çıkış talebi olan <OutputClaim ClaimTypeReferenceId="accountType"/>öğesini koleksiyondan OutputClaims kaldırın.

4. Adım - Kullanıcı yolculuğu düzenleme adımlarını güncelleştirme

Artık teknik profillerinizi ayarladığınıza göre, kullanıcı yolculuğu düzenleme adımlarınızı güncelleştirmeniz gerekir:

  1. Kullanıcı yolculuğunuzu HelloWorldJourney bulun ve tüm düzenleme adımlarını aşağıdaki kodla değiştirin:

        <!--<OrchestrationSteps>-->
            <OrchestrationStep Order="1" Type="ClaimsExchange">
                <ClaimsExchanges>
                    <ClaimsExchange Id="AccountTypeInputCollectorClaimsExchange" TechnicalProfileReferenceId="AccountTypeInputCollector"/>
                </ClaimsExchanges>
            </OrchestrationStep>
            <OrchestrationStep Order="2" Type="ClaimsExchange">
                <ClaimsExchanges>
                    <ClaimsExchange Id="GetAccessCodeClaimsExchange" TechnicalProfileReferenceId="AccessCodeInputCollector" />
                </ClaimsExchanges>
                </OrchestrationStep>
            <OrchestrationStep Order="3" Type="ClaimsExchange">
                <ClaimsExchanges>
                    <ClaimsExchange Id="GetUserInformationClaimsExchange" TechnicalProfileReferenceId="UserInformationCollector"/>
                </ClaimsExchanges>
            </OrchestrationStep>
            <OrchestrationStep Order="4" Type="ClaimsExchange">
                <ClaimsExchanges>
                    <ClaimsExchange Id="GetMessageClaimsExchange" TechnicalProfileReferenceId="ClaimGenerator"/>
                </ClaimsExchanges>
            </OrchestrationStep>
            <OrchestrationStep Order="5" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer"/>
        <!--</OrchestrationSteps>-->
    

    Düzenleme adımları, teknik profili düzenleme adımlarının Order özniteliği tarafından gösterilen sırayla çağırdığımız gösterir. Ancak kullanıcı AccessCodeInputCollector Kişisel Hesap hesap türünü seçerse teknik profil etkinleştirilir.

5. Adım - Özel ilke dosyasını karşıya yükleme

İlke dosyanızı karşıya yüklemek için Özel ilke dosyasını karşıya yükleme bölümünde yer alan adımları izleyin. Portalda bulunan dosyayla aynı ada sahip bir dosyayı karşıya yüklüyorsanız, zaten varsa Özel ilkenin üzerine yaz'ı seçtiğinizden emin olun.

6. Adım - Özel ilkeyi test edin

Özel ilkenizi test etmek için Özel ilkeyi test etme altındaki adımları izleyin:

  1. İlk ekranda, Hesap Türü için Kişisel Hesap'ı seçin.
  2. Erişim Kodu için 88888 girin ve Devam'ı seçin.
  3. Diğer ayrıntıları gerektiği gibi girin ve Devam'ı 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.
  4. 5. adımı yineleyin, ancak bu kez Hesap Türü'nü seçin, Contoso Çalışan Hesabı'nı seçin ve ardından istemleri izleyin.

Sonraki adımlar

3. adımda, öğesini kullanarak EnabledForUserJourneys teknik profili etkinleştirir veya devre dışı bırakırız. Alternatif olarak, bu serinin ilerleyen bölümlerinde öğrendiğimiz bir düzenleme adımını yürütmek veya atlamak için kullanıcı yolculuğu düzenleme adımlarının içindeki Önkoşullar'ı kullanabilirsiniz.

Ardından şunları öğrenin: