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
Henüz bir kiracınız yoksa, Azure aboneliğinize bağlı bir Azure AD B2C kiracısı oluşturun.
Bir web uygulaması kaydedin ve kimlik belirteci örtük verme özelliğini etkinleştirin. Yeniden Yönlendirme URI'sinde kullanın https://jwt.ms.
Bilgisayarınızda Visual Studio Code (VS Code) yüklü olmalıdır.
Azure Active Directory B2C özel ilkesini kullanarak kullanıcı hesabı oluşturma ve okuma sayfasındaki adımları tamamlayın. Bu makale, Kendi özel ilkelerinizi oluşturma ve çalıştırma kılavuz serisinin bir parçasıdır.
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:
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.
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:
1.2. adımda kopyaladığınız Kimlik Deneyimi Çerçevesi uygulamasının Uygulama (istemci) kimliğine sahip appID.
1.2. adımda kopyaladığınız Proxy Identity Experience Framework uygulamasının Uygulama (istemci) kimliğinesahip proxyAppID.
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 (
objectId
mevcut 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 şirketaccountType
seç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:
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
Azure Active Directory B2C özel ilkesini kullanarak sosyal bir hesapla kaydolma ve oturum açma akışı ayarlamayı öğrenin.
Kullanıcıların oturum açabilmesi için kaydolma bağlantısını kaldırmayı öğrenin.
OpenID Bağlan teknik profili hakkında daha fazla bilgi edinin.