Bölge tabanlı yapılandırma için Azure Active Directory B2C genel kimlik çerçevesi kavram kanıtı
Aşağıdaki bölümde, bölge tabanlı düzenleme için kavram kanıtı uygulamalarının nasıl oluşturulacağı açıklanmaktadır. Tamamlanan Azure Active Directory B2C (Azure AD B2C) özel ilkelerine buradan ulaşabilirsiniz.
Bölge tabanlı yaklaşım
Her bölgesel Azure AD B2C kiracısı, aşağıdaki özellikleri içeren bir Azure AD B2C Özel ilkesi gerektirir:
Kaydolma yolculuğu:
- Kullanıcının kullanıcı adını, parolasını ve diğer öznitelikleri toplamak için bir ekran görüntüleme
- Kullanıcı-bölge eşleme tablosunu sorgulayarak kullanıcı zaten varsa kaydolmayı önleyin
- Kullanıcı profilini yerel kiracıya yazma
- Kullanıcı adı-bölge eşlemesini eşleme tablosuna yazma
- Uygulamaya belirteç verme
Oturum açma yolculuğu:
- Kullanıcı adı ve parola ekranını görüntüleme
- Kullanıcı adını arama ve bölgesini döndürme
- Yerel kimlik bilgisi doğrulaması veya kiracılar arası kimlik bilgisi doğrulaması gerçekleştirme
- Yerel kiracıdan veya kiracılar arası bir çağrı aracılığıyla kullanıcı profilini okuyun
- Uygulamaya belirteç verme
Parola sıfırlama yolculuğu:
- OTP e-postası aracılığıyla kullanıcıların e-postasını doğrulamak için bir ekran görüntüleme
- Kullanıcı adını arama ve bölgesini döndürme
- Yeni parolayı yakalamak için ekran görüntüleme
- Yeni parolayı yerel kiracıya veya bir kiracılar arası çağrı aracılığıyla yazma
- Uygulamaya belirteç verme
Aşağıdaki blok diyagramı kavram kanıtını gösterir. Kılavuzda Azure AD B2C kiracılarının nasıl yapılandırılacağı gösterilir. Dış API katmanı ve Coğrafi olarak dağıtılmış arama tablosu bu kılavuzun bir parçası olarak dahil değildir.
Önkoşullar
İşletmenizin desteklemesi gereken bölge başına bir kiracı oluşturun. Bu kavram kanıtı için en az iki kiracı gerekir.
Depolama katmanınızı hazırlama
Kullanıcıların e-postasını, objectId'sini ve bölgesini depolayan bir depolama katmanı gerekir. Bu, kullanıcının kaydolduğu yeri izlemenize ve sorgulamanıza olanak tanır. Bu verileri kalıcı hale getirmek için bir Azure Depolama tablosu kullanabilirsiniz.
API katmanınızı hazırlama
Bölge tabanlı yaklaşımı göstermek için kavram kanıtının bir parçası olarak kullanılan birden çok API vardır.
Kullanıcının zaten mevcut olup olmadığını doğrulama
Kullanıcının zaten herhangi bir bölgede var olup olmadığını belirlemek için kayıt sırasında bir API kullanılır.
İstek aşağıdaki gibi olacaktır:
POST /doesUserExistInLookupTable HTTP/1.1
Host: yourapi.com
Content-Type: application/json
{
email: bob@contoso.com
}
Kullanıcı yoksa yanıt http 200 olmalıdır.
Kullanıcı varsa yanıt HTTP 409 olmalıdır.
Kullanıcı bölgesi eşlemesini kaydetme
Kullanıcının hangi bölgede kaydoldığını kaydetmek için kayıt sırasında bir API kullanılır.
İstek aşağıdaki gibi olacaktır:
POST /userToRegionLookup HTTP/1.1
Host: yourapi.com
Authorization Bearer: <token>
Content-Type: application/json
{
"email": "bob@contoso.com"
}
Kullanıcı varsa yanıt bir HTTP 200 olmalıdır.
Kullanıcı varsa yanıt HTTP 409 olmalıdır.
Kullanıcının hangi bölgede var olduğunu döndür
Kullanıcının hangi bölgede kaydolmuş olduğunu belirlemek için oturum açma sırasında bir API kullanılır. Bu, kiracılar arası kimlik doğrulamasının gerçekleştirilmesi gerekip gerekmediğini gösterir.
İstek aşağıdaki gibi olacaktır:
POST /userToRegionLookup HTTP/1.1
Host: yourapi.com
Authorization Bearer: <token>
Content-Type: application/json
{
"email": "bob@contoso.com"
}
Yanıt, kullanıcıların kayıtlı olduğu bir HTTP 200 bölgesi ve objectId olmalıdır.
{
"objectId": "460f9ffb-8b6b-458d-a5a4-b8f3a6816fc2",
"region": "APAC"
}
Kullanıcı yoksa veya bir hatayla karşılaşırsa API bir HTTP 409 ile yanıt vermelidir.
Kiracılar arasında parola yazma
Parola sıfırlama akışı sırasında, kullanıcılara parolalarını sıfırladıkları farklı bir bölgede yeni parola yazmak için bir API kullanılır.
İstek aşağıdaki gibi olacaktır:
POST /writePasswordCrossTenant HTTP/1.1
Host: yourapi.com
Authorization Bearer: <token>
Content-Type: application/json
{
"objectId": "460f9ffb-8b6b-458d-a5a4-b8f3a6816fc2",
"password": "some!strong123STRING"
}
İşlem başarılı olursa yanıt bir HTTP 200 veya hata varsa HTTP 409 olmalıdır.
Bölge tabanlı Azure AD B2C yapılandırması
Aşağıdaki bölümlerde, Azure AD B2C kiracısı, kullanıcının kaydolup gerektiğinde kiracılar arası kimlik doğrulamaları veya parola sıfırlama işlemleri gerçekleştirdiği bölgeyi izlemeye hazırlanır.
Özel ilke yapılandırmasına kaydolma
Kayıt sırasında, kullanıcının başka bir kiracıda mevcut olmadığından emin olmamız ve kullanıcı bölgesi eşlemesini bir dış tabloya yazmamız gerekir.
LocalAccountSignUpWithLogonEmail
Azure AD B2C başlangıç paketindeki teknik profili aşağıdaki gibi değiştirin:
<TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
...
<ValidationTechnicalProfiles>
<ValidationTechnicalProfile ReferenceId="REST-getTokenforExternalApiCalls" />
<ValidationTechnicalProfile ReferenceId="REST-doesUserExistInLookupTable" />
<ValidationTechnicalProfile ReferenceId="AAD-UserWriteUsingLogonEmail" />
<ValidationTechnicalProfile ReferenceId="REST-writeUserToRegionMapping" />
</ValidationTechnicalProfiles>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>
ValidationTechnicalProfiles aşağıdaki mantığı gerçekleştirir:
Teknik profili kullanarak korumalı API uç noktalarınızı çağırmak
REST-getTokenforExternalApiCalls
için bir belirteç alın.- Microsoft Entra taşıyıcı belirteci kullanarak API'nizi almak ve korumak için buradaki belgeleri izleyin.
Kullanıcının güvenli dış REST API uç noktanız aracılığıyla kullanıcı bölgesi eşlemesinde zaten mevcut olup olmadığını doğrulayın:
Bu API çağrısı tüm kaydolma işlemlerinden önce yapılır; bu API'nin çalışma süresi gereksinimlerini karşılamak için uygun yük dengeleme, dayanıklılık ve yük devretme mekanizmalarına sahip olduğundan emin olmak önemlidir.
Dış REST API aracılığıyla kullanıcı bölgesi eşlemesini sorgulamaya yönelik teknik profil örneği aşağıdaki gibidir:
<TechnicalProfile Id="REST-doesUserExistInLookupTable "> <DisplayName>User to Region lookup</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="ServiceUrl">https://myApi.com/doesUserExistInLookupTable</Item> <Item Key="AuthenticationType">Bearer</Item> <Item Key="UseClaimAsBearerToken">ext_Api_bearerToken</Item> <Item Key="SendClaimsIn">Body</Item> <Item Key="AllowInsecureAuthInProduction">false</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="ext_Api_bearerToken" /> <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="email" /> </InputClaims> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile>
Bu API, kullanıcı varsa HTTP 409 ile yanıt vermelidir ve uygun hata iletisinin ekranda görüntülenmesini sağlar. Aksi takdirde, kullanıcı yoksa bir HTTP 200 ile yanıt verin.
Güvenli dış REST API uç noktanız aracılığıyla kullanıcı bölgesi eşlemesini yazma
Bu API çağrısı tüm kaydolma işlemlerinden önce yapılır; bu API'nin çalışma süresi gereksinimlerini karşılamak için uygun yük dengeleme, dayanıklılık ve yük devretme mekanizmalarına sahip olduğundan emin olmak kritik önem taşır.
Dış REST API aracılığıyla kullanıcı-bölge eşlemesini yazmak için bir teknik profil örneği aşağıda verilmiştir:
<TechnicalProfile Id="REST-writeUserToRegionMapping"> <DisplayName>User to Region lookup</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="ServiceUrl">https://myApi.com/writeUserToRegionMapping</Item> <Item Key="AuthenticationType">Bearer</Item> <Item Key="UseClaimAsBearerToken">ext_Api_bearerToken</Item> <Item Key="SendClaimsIn">Body</Item> <Item Key="AllowInsecureAuthInProduction">false</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="ext_Api_bearerToken" /> <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="email" /> <InputClaim ClaimTypeReferenceId="region" DefaultValue="EMEA" /> <InputClaim ClaimTypeReferenceId="objectId" /> </InputClaims> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile> ```
Özel ilke yapılandırmasında oturum açma
Oturum açma sırasında, kullanıcıların profil konumunu belirlemeli ve profillerinin bulunduğu Azure AD B2C kiracısında kimliklerini doğrulamamız gerekir.
SelfAsserted-LocalAccountSignin-Email
kullanıcı bölgesi aramasını gerçekleştirmek için Azure AD B2C başlangıç paketindeki teknik profili değiştirin ve kullanıcı eriştiği kiracının farklı bir bölgesinden bu bölgeye geldiğinde kiracılar arası kimlik doğrulaması gerçekleştirin. şu şekilde güncelleştirin ValidationTechnicalProfiles
:
<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
...
<ValidationTechnicalProfiles>
<ValidationTechnicalProfile ReferenceId="REST-getTokenforExternalApiCalls" />
<ValidationTechnicalProfile ReferenceId="REST-regionLookup" />
<ValidationTechnicalProfile ReferenceId="login-NonInteractive">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="false">
<Value>user_region</Value>
<Value>EMEA</Value>
<Action>SkipThisValidationTechnicalProfile</Action>
</Precondition>
</Preconditions>
<ValidationTechnicalProfile ReferenceId="REST-login-NonInteractive-APAC">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="false">
<Value>user_region</Value>
<Value>APAC</Value>
<Action>SkipThisValidationTechnicalProfile</Action>
</Precondition>
</Preconditions>
</ValidationTechnicalProfile>
<ValidationTechnicalProfile ReferenceId="REST-fetchUserProfile-APAC">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="false">
<Value>user_region</Value>
<Value>APAC</Value>
<Action>SkipThisValidationTechnicalProfile</Action>
</Precondition>
</Preconditions>
</ValidationTechnicalProfile>
</ValidationTechnicalProfiles>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
</TechnicalProfile>
ValidationTechnicalProfiles, kullanıcı kimlik bilgilerini gönderdiğinde aşağıdaki mantığı gerçekleştirir:
Teknik profili kullanarak korumalı API uç noktalarınızı çağırmak
REST-getTokenforExternalApiCalls
için bir belirteç alın.- Microsoft Entra taşıyıcı belirteci kullanarak API'nizi almak ve korumak için buradaki belgeleri izleyin.
Güvenli dış REST API uç noktanız aracılığıyla kullanıcı bölgesi eşlemesini arama
Bu API çağrısı tüm kaydolma işlemlerinden önce yapılır; bu API'nin çalışma süresi gereksinimlerini karşılamak için uygun yük dengeleme, dayanıklılık ve yük devretme mekanizmalarına sahip olduğundan emin olmak önemlidir.
Dış REST API aracılığıyla kullanıcı bölgesi eşlemesini sorgulamaya yönelik teknik profil örneği aşağıdaki gibidir:
<TechnicalProfile Id="REST-regionLookup"> <DisplayName>User to Region lookup</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="ServiceUrl">https://myApi.com/userToRegionLookup</Item> <Item Key="AuthenticationType">Bearer</Item> <Item Key="UseClaimAsBearerToken">ext_Api_bearerToken</Item> <Item Key="SendClaimsIn">Body</Item> <Item Key="AllowInsecureAuthInProduction">false</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="ext_Api_bearerToken" /> <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="email" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="user_region" PartnerClaimType="region" /> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="objectId" /> </OutputClaims> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile>
Bu kiracıya
login-NonInteractive
kaydolan kullanıcılar için teknik profil aracılığıyla yerel hesap kimlik doğrulaması gerçekleştirin. Bu, Azure AD B2C başlangıç paketinde bulunan varsayılan teknik profildir.Koşullu olarak, ilgili her bölge için teknik profiller aracılığıyla
REST-login-NonInteractive-[region]
kiracılar arası kimlik doğrulaması gerçekleştirin.Bu, kullanıcıların giriş kiracısından bir MS Graph API belirteci de alır. Temsilci
user.read
izni için MS Graph API izinlerine sahip her bölgesel kiracıya Bir Yerel Uygulama Uygulaması Kaydı kaydedin.Dış REST API aracılığıyla kullanıcı bölgesi eşlemesi gerçekleştirmeye yönelik bir teknik profil örneği aşağıdaki gibidir:
<TechnicalProfile Id="REST-login-NonInteractive-APAC"> <DisplayName>non interactive authentication to APAC</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="ServiceUrl">https://login.microsoftonline.com/yourAPACb2ctenant.onmicrosoft.com/oauth2/v2.0/token</Item> <Item Key="AuthenticationType">None</Item> <Item Key="SendClaimsIn">Form</Item> <Item Key="AllowInsecureAuthInProduction">true</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="apac_client_id" PartnerClaimType="client_id" DefaultValue="cf3f6898-9a79-426a-ba16-10e1a377c843" /> <InputClaim ClaimTypeReferenceId="ropc_grant_type" PartnerClaimType="grant_type" DefaultValue="password" /> <InputClaim ClaimTypeReferenceId="signInName" PartnerClaimType="username" /> <InputClaim ClaimTypeReferenceId="password" /> <InputClaim ClaimTypeReferenceId="scope" DefaultValue="https://graph.microsoft.com/.default" AlwaysUseDefaultValue="true" /> <InputClaim ClaimTypeReferenceId="nca" PartnerClaimType="nca" DefaultValue="1" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="ext_Api_bearerToken" PartnerClaimType="access_token" /> </OutputClaims> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile>
öğesini
ServiceUrl
kimlik doğrulaması için hedeflemeniz gereken kiracıyla değiştirin<yourb2ctenant>
.Giriş talebi için öğesini doldurmak
DefaultValue
içinapac_client_id
uygulama kaydınıApplicationId
kullanın.
Koşullu olarak, ilgili her bölgenin teknik profilleri aracılığıyla
REST-fetchUserProfile-[region]
kiracılar arası REST API çağrısı kullanarak kullanıcı profilini getirin.MS Graph API aracılığıyla kullanıcı profilini okumak için örnek bir teknik profil aşağıdaki gibidir:
<TechnicalProfile Id="REST-fetchUserProfile-APAC"> <DisplayName>fetch user profile cross tenant</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="ServiceUrl">https://graph.microsoft.com/beta/me</Item> <Item Key="AuthenticationType">Bearer</Item> <Item Key="UseClaimAsBearerToken">graph_bearerToken</Item> <Item Key="SendClaimsIn">Body</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="graph_bearerToken" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="id" /> <OutputClaim ClaimTypeReferenceId="givenName" /> <OutputClaim ClaimTypeReferenceId="surName" /> <OutputClaim ClaimTypeReferenceId="displayName" /> <OutputClaim ClaimTypeReferenceId="userPrincipalName" PartnerClaimType="upn" /> <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" /> </OutputClaims> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile>
Parola sıfırlama özel ilke yapılandırması
Parola sıfırlama sırasında, kullanıcı profili konumunu belirlemeli ve parolayı kullanıcı profilinin bulunduğu Azure AD B2C kiracısıyla güncelleştirmemiz gerekir.
Kullanıcı kullanıcı bölgesi aramasını LocalAccountSignUpWithLogonEmail
gerçekleştirmek için Azure AD B2C başlangıç paketindeki teknik profili değiştirin ve ilgili kiracıdaki parolayı güncelleştirin. şu şekilde güncelleştirin ValidationTechnicalProfiles
:
<TechnicalProfile Id="LocalAccountDiscoveryUsingEmailAddress">
<OutputClaims>
...
<OutputClaim ClaimTypeReferenceId="ext_Api_bearerToken" DefaultValue="EMEA"/>
</OutputClaims>
<ValidationTechnicalProfiles>
<ValidationTechnicalProfile ReferenceId="REST-getTokenforExternalApiCalls">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="true">
<Value>user_region</Value>
<Value>EMEA</Value>
<Action>SkipThisValidationTechnicalProfile</Action>
</Precondition>
</Preconditions>
</ValidationTechnicalProfile>
<ValidationTechnicalProfile ReferenceId="REST-regionLookup" />
<ValidationTechnicalProfile ReferenceId="AAD-UserReadUsingEmailAddress" />
</ValidationTechnicalProfiles>
</TechnicalProfile>
ValidationTechnicalProfiles, kullanıcı parolasını güncelleştirmek için doğrulanmış bir e-posta gönderdiğinde aşağıdaki mantığı gerçekleştirir:
Korumalı API uç noktalarınızı çağırmak için belirteç alma
Güvenli dış REST API uç noktanız aracılığıyla kullanıcı bölgesi eşlemesini arama
- Bu API çağrısı tüm parola sıfırlama denemelerinden önce yapılır; bu API'nin çalışma süresi gereksinimlerini karşılamak için uygun yük dengeleme, dayanıklılık ve yük devretme mekanizmalarına sahip olduğundan emin olmak kritik önem taşır.
Yeni parolayı LocalAccountWritePasswordUsingObjectId
yerel kiracıya veya koşullu olarak bölgeler arası kiracıya yazmak için teknik profili değiştirin.
<TechnicalProfile Id="LocalAccountWritePasswordUsingObjectId">
...
<ValidationTechnicalProfiles>
<ValidationTechnicalProfile ReferenceId="AAD-UserWritePasswordUsingObjectId">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="false">
<Value>user_region</Value>
<Value>EMEA</Value>
<Action>SkipThisValidationTechnicalProfile</Action>
</Precondition>
</Preconditions>
</ValidationTechnicalProfile>
<ValidationTechnicalProfile ReferenceId="REST-UserWritePasswordUsingObjectId-APAC">
<Preconditions>
<Precondition Type="ClaimEquals" ExecuteActionsIf="false">
<Value>user_region</Value>
<Value>APAC</Value>
<Action>SkipThisValidationTechnicalProfile</Action>
</Precondition>
</Preconditions>
</ValidationTechnicalProfile>
</ValidationTechnicalProfiles>
</TechnicalProfile>
ValidationTechnicalProfiles, kullanıcı yeni bir parola gönderdiğinde aşağıdaki mantığı gerçekleştirir:
Kullanıcı EMEA kiracısında (bu kiracı) varsa, kullanıcılara yeni parolayı dizine yazın.
Koşullu olarak, rest API çağrısı kullanarak kullanıcı profilinin bulunduğu bölgedeki kullanıcı profiline yeni parolayı yazın.
<TechnicalProfile Id="REST-UserWritePasswordUsingObjectId-APAC"> <DisplayName>Write password to APAC tenant</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="ServiceUrl">https://myApi.com/writePasswordCrossTenant</Item> <Item Key="AuthenticationType">Bearer</Item> <Item Key="UseClaimAsBearerToken">ext_Api_bearerToken</Item> <Item Key="SendClaimsIn">Body</Item> <Item Key="DebugMode">true</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="ext_Api_bearerToken" /> <InputClaim ClaimTypeReferenceId="objectId" /> <InputClaim ClaimTypeReferenceId="newPassword" /> </InputClaims> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile>