Azure Active Directory B2C özel ilkesini kullanarak yerel bir hesap için kaydolma ve oturum açma akışı ayarlama

Azure Active Directory B2C özel ilkesi kullanarak kullanıcı hesabı oluşturma ve okuma makalesinde, kullanıcı yeni bir kullanıcı hesabı oluşturur ancak bu hesapta oturum açmaz.

Bu makalede, kullanıcının Azure AD B2C yerel hesabı oluşturmasına veya bir hesapta oturum açmasına olanak tanıyan bir Azure Active Directory B2C (Azure AD B2C) özel ilkesi yazmayı öğreneceksiniz. Yerel hesap, bir kullanıcı uygulamanıza kaydolduğunda Azure AD B2C kiracınızda oluşturulan bir hesabı ifade eder.

Genel Bakış

Azure AD B2C, kullanıcı kimlik bilgilerini doğrulamak için OpenID Bağlan kimlik doğrulama protokollerini kullanır. Azure AD B2C'de, diğer bilgilerin yanı sıra kullanıcı kimlik bilgilerini güvenli bir uç noktaya gönderirsiniz ve bu da kimlik bilgilerinin geçerli olup olmadığını belirler. Özetle, Azure AD B2C'nin OpenID Bağlan uygulamasını kullandığınızda, web uygulamalarınızdaki kaydolma, oturum açma ve diğer kimlik yönetimi deneyimlerini Microsoft Entra ID'ye dış kaynak olarak atayabilirsiniz.

Azure AD B2C özel ilkesi, güvenli bir Microsoft uç noktasına çağrı yapmak için kullandığınız bir OpenID Bağlan teknik profili sağlar. OpenID Bağlan teknik profili hakkında daha fazla bilgi edinin.

Ö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 - OpenID Bağlan teknik profilini yapılandırma

Bir OpenID Bağlan teknik profili yapılandırmak için üç adım gerçekleştirmeniz gerekir:

  • Daha fazla talep bildirin.
  • Uygulamaları Azure portalınıza kaydedin.
  • Son olarak, OpenID Bağlan Teknik Profili'nin kendisini yapılandırın

Adım 1.1 - Daha fazla talep bildirme

ContosoCustomPolicy.XML Dosyasında ClaimsSchema bölümünü bulun ve aşağıdaki kodu kullanarak daha fazla talep ekleyin:

    <!--<ClaimsSchema>-->
        ...
        <ClaimType Id="grant_type">
            <DisplayName>grant_type</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>Special parameter passed for local account authentication to login.microsoftonline.com.</UserHelpText>
        </ClaimType>
        
        <ClaimType Id="scope">
            <DisplayName>scope</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>Special parameter passed for local account authentication to login.microsoftonline.com.</UserHelpText>
        </ClaimType>
        
        <ClaimType Id="nca">
            <DisplayName>nca</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>Special parameter passed for local account authentication to login.microsoftonline.com.</UserHelpText>
        </ClaimType>
        
        <ClaimType Id="client_id">
            <DisplayName>client_id</DisplayName>
            <DataType>string</DataType>
            <AdminHelpText>Special parameter passed to EvoSTS.</AdminHelpText>
            <UserHelpText>Special parameter passed to EvoSTS.</UserHelpText>
        </ClaimType>
        
        <ClaimType Id="resource_id">
            <DisplayName>resource_id</DisplayName>
            <DataType>string</DataType>
            <AdminHelpText>Special parameter passed to EvoSTS.</AdminHelpText>
            <UserHelpText>Special parameter passed to EvoSTS.</UserHelpText>
        </ClaimType>
    <!--</ClaimsSchema>-->

1.2. Adım - Kimlik Deneyimi Çerçevesi uygulamalarını kaydetme

Azure AD B2C, yerel hesaplarla kullanıcılara kaydolmak ve oturum açmak için kullandığı iki uygulamayı kaydetmenizi gerektirir: IdentityExperienceFramework, bir web API'si ve IdentityExperienceFramework uygulaması için temsilci iznine sahip yerel bir uygulama olan ProxyIdentityExperienceFramework.

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

  1. Identity Experience Framework uygulamasını kaydetmek için IdentityExperienceFramework uygulamasını kaydetme'deki adımları kullanın. Sonraki adımda kullanmak üzere Kimlik Deneyimi Çerçevesi uygulama kaydı için Uygulama (istemci) kimliği olan appID değerini kopyalayın.

  2. Proxy Identity Experience Framework uygulamasını kaydetmek için ProxyIdentityExperienceFramework uygulamasını kaydetme'deki adımları kullanın. Sonraki adımda kullanmak üzere Proxy Identity Experience Framework uygulama kaydı için Uygulama (istemci) kimliği olan proxyAppID değerini kopyalayın.

Adım 1.3 - OpenID Bağlan teknik profilini yapılandırma

ContosoCustomPolicy.XML Dosyasında ClaimsProviders bölümünü bulun ve aşağıdaki kodu kullanarak OpenID Bağlan Teknik Profilinizi tutan bir Talep Sağlayıcısı öğesi ekleyin:

    <!--<ClaimsProviders>-->
        ...
        <ClaimsProvider>
            <DisplayName>OpenID Connect Technical Profiles</DisplayName>
            <TechnicalProfiles>
                <TechnicalProfile Id="SignInUser">
                    <DisplayName>Sign in with Local Account</DisplayName>
                    <Protocol Name="OpenIdConnect" />
                    <Metadata>
                        <Item Key="UserMessageIfClaimsPrincipalDoesNotExist">We didn't find this account</Item>
                        <Item Key="UserMessageIfInvalidPassword">Your password or username is incorrect</Item>
                        <Item Key="UserMessageIfOldPasswordUsed">You've used an old password.</Item>
                        <Item Key="ProviderName">https://sts.windows.net/</Item>
                        <Item Key="METADATA">https://login.microsoftonline.com/{tenant}/.well-known/openid-configuration</Item>
                        <Item Key="authorization_endpoint">https://login.microsoftonline.com/{tenant}/oauth2/token</Item>
                        <Item Key="response_types">id_token</Item>
                        <Item Key="response_mode">query</Item>
                        <Item Key="scope">email openid</Item>
                        <!-- Policy Engine Clients -->
                        <Item Key="UsePolicyInRedirectUri">false</Item>
                        <Item Key="HttpBinding">POST</Item>
                        <Item Key="client_id">proxyAppID</Item>
                        <Item Key="IdTokenAudience">appID</Item>
                    </Metadata>
                    <InputClaims>
                        <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="username" Required="true" />
                        <InputClaim ClaimTypeReferenceId="password" PartnerClaimType="password" Required="true" />
                        <InputClaim ClaimTypeReferenceId="grant_type" DefaultValue="password" />
                        <InputClaim ClaimTypeReferenceId="scope" DefaultValue="openid" />
                        <InputClaim ClaimTypeReferenceId="nca" PartnerClaimType="nca" DefaultValue="1" />
                        <InputClaim ClaimTypeReferenceId="client_id" DefaultValue="proxyAppID" />
                        <InputClaim ClaimTypeReferenceId="resource_id" PartnerClaimType="resource" DefaultValue="appID" />
                    </InputClaims>
                    <OutputClaims>
                        <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid" />
                    </OutputClaims>
                </TechnicalProfile>
            </TechnicalProfiles>
        </ClaimsProvider>
    <!--</ClaimsProviders>-->

Her iki örneğini de değiştirin:

2. Adım - Oturum açma kullanıcı arabirimini yapılandırma

İlkeniz çalıştırıldığında kullanıcının oturum açmasına izin veren bir kullanıcı arabirimi görmesi gerekir. Kullanıcı arabiriminin zaten bir hesabı yoksa kaydolma seçeneği de vardır. Bunu yapmak için iki adım gerçekleştirmeniz gerekir:

  • Kullanıcıya oturum açma formunu görüntüleyen, kendinden onaylanan bir teknik profil yapılandırın.
  • Oturum açma kullanıcı arabirimi için içerik tanımını yapılandırın.

Adım 2.1 - Oturum açma kullanıcı arabirimi teknik profilini yapılandırma

ContosoCustomPolicy.XML Dosyasında, aşağıdaki kodu kullanarak teknik profili bulun SignInUser ve arkasına SelfAsserted Teknik Profili ekleyin:

    <TechnicalProfile Id="UserSignInCollector">
        <DisplayName>Local Account Signin</DisplayName>
        <Protocol Name="Proprietary"
            Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        <Metadata>
            <Item Key="setting.operatingMode">Email</Item>
            <Item Key="SignUpTarget">AccountTypeInputCollectorClaimsExchange</Item>
        </Metadata>
        <DisplayClaims>
            <DisplayClaim ClaimTypeReferenceId="email" Required="true" />
            <DisplayClaim ClaimTypeReferenceId="password" Required="true" />
        </DisplayClaims>
        <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="email" />
            <OutputClaim ClaimTypeReferenceId="password"  />
            <OutputClaim ClaimTypeReferenceId="objectId" />
        </OutputClaims>
        <ValidationTechnicalProfiles>
            <ValidationTechnicalProfile ReferenceId="SignInUser" />
        </ValidationTechnicalProfiles>
    </TechnicalProfile>

Kullanıcıya oturum açma formunu görüntüleyen UserSignInCollector adlı SelfAsserted Teknik Profili ekledik. Teknik profili, kullanıcının e-posta adresini meta verilerde setting.operatingMode belirtildiği gibi oturum açma adı olarak toplayacak şekilde yapılandırdık. Oturum açma formu, kullanıcıyı meta veriler tarafından SignUpTarget belirtilen bir kayıt formuna yönlendiren bir kaydolma bağlantısı içerir. Düzenleme adımlarında SignUpWithLogonEmailExchange'iClaimsExchange nasıl ayarlayacağımızı göreceksiniz.

Ayrıca SignInUser OpenID Bağlan Teknik Profilini ValidationTechnicalProfile olarak ekledik. Bu nedenle, kullanıcı Oturum aç düğmesini seçtiğinde SignInUser teknik profili yürütülür (5. adımda ekran görüntüsüne bakın).

Sonraki adımda (2.2. adım), bu SelfAsserted Teknik Profilinde kullanacağımız bir içerik tanımı yapılandıracağız.

2.2. Adım - Oturum açma arabirimi içerik tanımını yapılandırma

ContosoCustomPolicy.XML Dosyasında ContentDefinitions bölümünü bulun ve ardından aşağıdaki kodu kullanarak İçerik Tanımı'nda oturum açın:

    <!--<ContentDefinitions>-->
        ...
            <ContentDefinition Id="SignupOrSigninContentDefinition">
                <LoadUri>~/tenant/templates/AzureBlue/unified.cshtml</LoadUri>
                <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
                <DataUri>urn:com:microsoft:aad:b2c:elements:contract:unifiedssp:2.1.7</DataUri>
                <Metadata>
                    <Item Key="DisplayName">Signin and Signup</Item>
                </Metadata>
            </ContentDefinition>
    <!--</ContentDefinitions>-->

Kendi kendine onaylanan teknik profilimiz için bir içerik tanımı yapılandırdık. SignupOrSigninContentDefinition Meta veri öğesini kullanarak teknik profilde belirtebilir veya düzenleme adımlarında teknik profile başvurdığımızda belirtebiliriz. Daha önce, bir içerik tanımını doğrudan kendi kendine onaylanan teknik profilde belirtmeyi öğrendik, bu nedenle bu makalede düzenleme adımlarında teknik profile başvurdığımızda bunu belirtmeyi öğreneceksiniz. 3. adım.

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

ContosoCustomPolicy.XML Dosyasında HelloWorldJourney kullanıcı yolculuğunu bulun ve tüm düzenleme adımları koleksiyonunu aşağıdaki kodla değiştirin:

    <!--<OrchestrationSteps>-->
        ...
        <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="SignupOrSigninContentDefinition">
            <ClaimsProviderSelections>
                <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
            </ClaimsProviderSelections>
            <ClaimsExchanges>
                <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="UserSignInCollector" />
            </ClaimsExchanges>
        </OrchestrationStep>

        <OrchestrationStep Order="2" Type="ClaimsExchange">
            <Preconditions>
                <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
                    <Value>objectId</Value>
                    <Action>SkipThisOrchestrationStep</Action>
                </Precondition>
            </Preconditions>
            <ClaimsExchanges>
                <ClaimsExchange Id="AccountTypeInputCollectorClaimsExchange" TechnicalProfileReferenceId="AccountTypeInputCollector"/>
            </ClaimsExchanges>
        </OrchestrationStep>

        <OrchestrationStep Order="3" Type="ClaimsExchange">
            <Preconditions>
                <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
                    <Value>objectId</Value>
                    <Action>SkipThisOrchestrationStep</Action>
                </Precondition>
                <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
                  <Value>accountType</Value>
                  <Value>company</Value>
                  <Action>SkipThisOrchestrationStep</Action>
                </Precondition>
            </Preconditions>
            <ClaimsExchanges>
                <ClaimsExchange Id="GetAccessCodeClaimsExchange" TechnicalProfileReferenceId="AccessCodeInputCollector" />
            </ClaimsExchanges>
        </OrchestrationStep>
        
        <OrchestrationStep Order="4" Type="ClaimsExchange">
            <Preconditions>
                <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
                    <Value>objectId</Value>
                    <Action>SkipThisOrchestrationStep</Action>
                </Precondition>
            </Preconditions>
            <ClaimsExchanges>
                <ClaimsExchange Id="SignUpWithLogonEmailExchange" TechnicalProfileReferenceId="UserInformationCollector" />
            </ClaimsExchanges>
        </OrchestrationStep>  
      
        <OrchestrationStep Order="5" Type="ClaimsExchange">
            <ClaimsExchanges>
            <ClaimsExchange Id="AADUserReaderExchange" TechnicalProfileReferenceId="AAD-UserRead"/>
            </ClaimsExchanges>
        </OrchestrationStep>                
        
        <OrchestrationStep Order="6" Type="ClaimsExchange">
            <ClaimsExchanges>
            <ClaimsExchange Id="GetMessageClaimsExchange" TechnicalProfileReferenceId="UserInputMessageClaimGenerator"/>
            </ClaimsExchanges>          
        </OrchestrationStep>                
        
        <OrchestrationStep Order="7" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
    <!--</OrchestrationSteps>-->

düzenleme adımlarında iki ile beş arası, Orchestration Adımı'nın çalıştırılıp çalıştırılamadığını belirlemek için önkoşulları kullandık. Kullanıcının oturum açıp açmadığını veya kaydolarak kaydolmadığını belirlememiz gerekir.

Özel ilke çalıştırıldığında:

  • Düzenleme Adım 1 - Kullanıcının oturum açabilmesi veya Şimdi kaydol bağlantısını seçebilmesi için oturum açma sayfasını görüntüler. UserSignInCollector tarafından onaylanan teknik profilin oturum açma formunu görüntülemek için kullandığı içerik tanımını belirttiğimize dikkat edin.

  • Düzenleme Adım 2 - Kullanıcı kaydolduysa (objectIdmevcut değilse) bu adım çalışır, bu nedenle AccountTypeInputCollector kendi kendine onaylanan teknik profili çağırarak hesap türü seçim formunu görüntüleriz.

  • Düzenleme Adımı 3 - Bu adım, kullanıcı kaydolup (objectId mevcut değilse) ve bir kullanıcı bir şirket accountTypeseçmezse çalışır. Bu nedenle, kullanıcıdan AccessCodeInputCollector tarafından onaylanan teknik profili çağırarak giriş accessCode yapmasını istememiz gerekir.

  • Düzenleme 4. Adım : Bu adım, kullanıcı kaydolduysa (objectId yoksa) çalışır, bu nedenle UserInformationCollector kendi kendine onaylanan teknik profili çağırarak kaydolma formunu görüntüleriz.

  • Düzenleme 5 . Adım : Bu adım Microsoft Entra ID'den hesap bilgilerini okur (Microsoft Entra ID teknik profilini çağırırız AAD-UserRead ), böylece kullanıcının oturum açıp açmadığını çalıştırır.

  • Düzenleme Adım 6 - Bu adım, kullanıcının selamlama iletisini derlemek için UserInputMessageClaimGenerator teknik profilini çağırır.

  • Düzenleme 7 . Adım: Son olarak, 8. adım ilkenin yürütmesinin sonunda JWT belirtecini bir araya getirir ve döndürür.

4. Adım - İlkeyi 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.

5. Adım - Test ilkesi

Özel ilkenizi test etmek için Özel ilkeyi test etme'deki adımları izleyin. İlke çalıştırıldıktan sonra aşağıdaki ekran görüntüsüne benzer bir arabirim görürsünüz:

screenshot of sign-up or sign-in interface.

Mevcut bir hesabın E-posta Adresini ve Parolasını girerek oturum açabilirsiniz. Henüz bir hesabınız yoksa yeni bir kullanıcı hesabı oluşturmak için Şimdi kaydol bağlantısını seçmeniz gerekir.

Sonraki adımlar