Tek sayfalı örnek bir uygulamada kimlik doğrulamasını Azure AD B2C
Bu makalede, SPA'larınıza B2C (Azure AD B2C Azure Active Directory) kimlik doğrulaması eklemeyi göstermek için örnek bir JavaScript tek sayfalı uygulaması (SPA) kullanılır.
Genel Bakış
OpenID Bağlan (OIDC), OAuth 2.0 üzerinde yerleşik bir kimlik doğrulama protokolüdür. Bir kullanıcının uygulamada güvenli bir şekilde oturum açmasını sağlamak için bunu kullanabilirsiniz. Bu tek sayfalı uygulama örneği, MSAL.js ve OIDC PKCE akışını kullanır. MSAL.js, SPA'lara kimlik doğrulaması ve yetkilendirme desteği eklemeyi basitleştiren, Microsoft tarafından sağlanan bir kitaplıktır.
Oturum açma akışı
Oturum açma akışı aşağıdaki adımları içerir:
- Kullanıcılar web uygulamasına gider ve Oturum aç'ı seçer.
- Uygulama bir kimlik doğrulama isteği başlatıyor ve kullanıcıları Azure AD B2C.
- Kullanıcılar kaydol veya oturum asın ve parolasını sıfırlar. Alternatif olarak, bir sosyal hesap ile oturum açmaları da gerekir.
- Kullanıcılar oturum açtırdikten Azure AD B2C uygulamaya bir yetkilendirme kodu döndürür.
- Tek sayfalı uygulama kimlik belirteci doğrular, talepleri okur ve kullanıcıların korumalı kaynakları ve API'leri çağırmalarına olanak sağlar.
Uygulama kaydına genel bakış
Uygulamanın web API'si ile oturum Azure AD B2C ve bir web API'si çağırmasını sağlamak için, Azure AD B2C kaydetmeniz gerekir.
Web uygulaması kaydı, uygulamanın Azure AD B2C. Kayıt sırasında yeniden yönlendirme URI'sini belirtirsiniz. Yeniden yönlendirme URI'si, kimlik doğrulaması tamamlandıktan sonra kullanıcıların Azure AD B2C yönlendirilen uç Azure AD B2C noktasıdır. Uygulama kayıt işlemi, istemci kimliği olarak da bilinen ve uygulamanızı benzersiz olarak tanımlayan bir uygulama kimliği üretir.
Web API'si kaydı, uygulamanın güvenli bir web API'si çağırmasını sağlar. Kayıt web API'si kapsamlarını içerir. Kapsamlar, web API'niz gibi korumalı kaynaklara izinleri yönetmek için bir yol sağlar. Web uygulamasına web API kapsamları için izinler verin. Erişim belirteci istenirken, uygulamanız isteğin kapsam parametresinde istenen izinleri belirtir.
Uygulama mimarisi ve kayıtları aşağıdaki diyagramda gösterildiği gibi:

Web API'sini çağırma
Kimlik doğrulaması tamamlandıktan sonra kullanıcılar, korumalı bir web API'sini çağıran uygulamayla etkileşime geçmelerini sağlar. Web API'si taşıyıcı belirteç kimlik doğrulamasını kullanır. Taşıyıcı belirteci, uygulamanın verilerden edinilen erişim Azure AD B2C. Uygulama belirteci HTTPS isteğinin yetkilendirme üst bilgisinde iletir.
Authorization: Bearer <token>
Erişim belirtecin kapsamı web API'sini kapsamları ile eşleyense, kimlik doğrulama kitaplığı doğru kapsamlara sahip yeni bir erişim belirteci alır.
Oturum açma akışı
Oturum kapatma akışı aşağıdaki adımları içerir:
- Uygulamadan kullanıcılar oturumunu kapatın.
- Uygulama, oturum nesnelerini temizler ve kimlik doğrulama kitaplığı, belirteç önbelleğini temizler.
- Uygulama, Azure AD B2C oturumunu sonlandırmak için kullanıcıları Azure AD B2C oturum kapatma uç noktasına götürür.
- Kullanıcılar uygulamaya yeniden yönlendirilir.
Önkoşullar
Çalışan bir bilgisayar:
- Visual Studio Codeveya başka bir kod düzenleyicisi kullanın.
- Node.js çalışma zamanı
1. Adım: Kullanıcı akışınızı yapılandırma
Kullanıcılar uygulamanıza oturum açmayı deneyinca, uygulama bir kullanıcı akışı aracılığıyla yetkilendirme uç noktasına bir kimlik doğrulama isteği başlatır. Kullanıcı akışı, kullanıcı deneyimini tanımlar ve kontrol eder. Kullanıcılar kullanıcı akışını tamamlandıktan sonra Azure AD B2C belirteç üretir ve ardından kullanıcıları uygulamanıza geri yönlendirer.
Henüz bunu yapmadıysanız, bir kullanıcı akışı veya özel bir ilke oluşturun.
2. Adım: SPA ve API'nizi kaydetme
Bu adımda SPA ve web API'si uygulama kayıtlarını oluşturur ve web API'nizin kapsamlarını belirtirsiniz.
2.1. Adım: Web API uygulamasını kaydetme
Web API'si uygulama kaydını ( Uygulama Kimliği: 2) oluşturmak için şu adımları izleyin:
Azure portalında oturum açın.
Kiracınız için kiracınızı içeren dizini Azure AD B2C olun. Portal araç çubuğunda Dizinler + abonelikler simgesini seçin.
Portal ayarları sayfasında | Dizinler + abonelikler sayfasında, dizin Azure AD B2C dizinlerinizi dizin adı listesinde bulup Değiştir'i seçin.
Aşağıdaki Azure portal için arama Azure AD B2C.
Yeni Uygulama kayıtları'yi ve ardından Yeni kayıt'ı seçin.
Ad alanına uygulama için bir ad girin (örneğin, my-api1). Yeniden Yönlendirme URI'si ve Desteklenen hesap türleri için varsayılan değerleri bırakın.
Kaydet’i seçin.
Uygulama kaydı tamamlandıktan sonra Genel Bakış'ı seçin.
Web uygulamasını yapılandırarak daha sonra kullanmak üzere Uygulama (istemci) kimliği değerini kaydedin.

2.2. Adım: Kapsamları yapılandırma
Oluşturduğunuz my-api1 uygulamasını (Uygulama Kimliği: 2) seçerek Genel Bakış sayfasını açın.
Yönet'in altında API'yi açığa çıkar'ı seçin.
Uygulama Kimliği URI'si'nin yanındaki Ayarla bağlantısını seçin. Varsayılan değeri (GUID) benzersiz bir adla (örneğin, tasks-api) değiştirin ve Kaydet'i seçin.
Web uygulamanız web API'si için bir erişim belirteci isteğite bulundurursa, API için tanımladığınız her kapsam için ön ek olarak bu URI'yi eklemesi gerekir.
Bu API tarafından tanımlanan kapsamlar altında Kapsam ekle'yi seçin.
API'ye okuma erişimini tanımlayan bir kapsam oluşturmak için:
- Kapsam adı alanına tasks.read girin.
- Yönetici onayı görünen adı için Görevlere okuma erişimi API'si girin.
- Yönetici onayı açıklaması için Görevler API'sini okuma erişimine izin verir girin.
Kapsam ekle'yi seçin.
Kapsam ekle'yi seçin ve ardından API'ye yazma erişimini tanımlayan bir kapsam ekleyin:
- Kapsam adı alanına tasks.write yazın.
- Yönetici onayı görünen adı için Görevlere yazma erişimi API'si girin.
- Yönetici onayı açıklaması için Görevler API'sini yazma erişimine izin verir yazın.
Kapsam ekle'yi seçin.
2.3. Adım: SPA'ya kaydolma
SPA kaydını oluşturmak için şunları yapın:
- Azure portalında oturum açın.
- Kiracınız için geçerli olan kiracınızı içeren dizini Azure AD B2C olun. Portal araç çubuğunda Dizinler + abonelikler simgesini seçin.
- Portal ayarları sayfasında | Dizinler + abonelikler sayfasında, dizin Azure AD B2C dizinlerinizi dizin adı listesinde bulup Değiştir'i seçin.
- için arama Azure AD B2C.
- Yeni Uygulama kayıtları'yi ve ardından Yeni kayıt'ı seçin.
- Uygulama için bir Ad girin (örneğin, MyApp).
- Desteklenen hesap türleri altında, herhangi bir kimlik sağlayıcısı veya kuruluş dizininde hesaplar (kullanıcı akışlarıyla kullanıcıların kimliğini doğrulama için) öğesini seçin.
- Yeniden Yönlendirme URI'si altında Tek sayfalı uygulama (SPA) öğesini seçin ve URL kutusuna
http://localhost:6420girin. - İzinler'in altında Yönetici onayı ver openid ve çevrimdışı erişim izinleri onay kutusunu seçin.
- Kaydet’i seçin.
2.4. Adım: Örtülü onay akışını etkinleştirme
Ardından, örtülü onay akışını etkinleştirin:
Yönet'in altında Kimlik Doğrulaması'ı seçin.
Yeni deneyimi deneyin (gösteriliyorsa) öğesini seçin.
Örtülü onay'ın altında Kimlik belirteçleri onay kutusunu seçin.
Kaydet’i seçin.
Web uygulamasını yapılandırarak daha sonra kullanmak üzere Uygulama (istemci) kimliğini kaydetme.

2.5. Adım: İzinleri ver
Uygulamanıza ( Uygulama Kimliği: 1) izinleri vermek için şu adımları izleyin:
Uygulama Uygulama kayıtları ve ardından oluşturduğunuz uygulamayı seçin ( Uygulama Kimliği: 1).
Yönet'in altında API izinleri'i seçin.
Yapılandırılmış izinler'in altında İzin ekle'yi seçin.
API'lerim sekmesini seçin.
Web uygulamasına erişim verilmesi gereken API'yi ( Uygulama Kimliği: 2) seçin. Örneğin my-api1 girin.
İzin altında görevler'i genişletin ve daha önce tanımlandığı kapsamları seçin (örneğin, tasks.read ve tasks.write).
İzin ekle'yi seçin.
için Yönetici onayı <your tenant name> ver'i seçin.
Evet’i seçin.
Yenile'yi seçin ve ardından her iki kapsam için de Durum altında Verilen ... seçeneğinin görüntülendiğinden emin olur.
Yapılandırılan izinler listesinden kapsamınızı seçin ve kapsam tam adını kopyalayın.

3. Adım: SPA örnek kodunu alın
Bu örnek, tek sayfalı bir uygulamanın kullanıcı Azure AD B2C oturum açma için nasıl kullanabileceğini gösteriyor. Ardından uygulama bir erişim belirteci alır ve korumalı bir web API'sini arar.
SPA örnek kodunu almak için, aşağıdakilerden birini yapabilirsiniz:
Aşağıdaki komutu çalıştırarak GitHub örnek kopyadan alın:
git clone https://github.com/Azure-Samples/ms-identity-b2c-javascript-spa.git
3.1. Adım: SPA örneğini güncelleştirme
SPA örneğini edindilene göre, kodu Azure AD B2C ve web API'si değerleriyle güncelleştirin. Örnek klasörde, klasörünün altında, aşağıdaki tabloda listelenen JavaScript dosyalarını açın ve App ardından bunları karşılık gelen değerlerle güncelleştirin.
| Dosya | Anahtar | Değer |
|---|---|---|
| authConfig.js | clientId | Adım 2.3'dekiSPA kimliği. |
| policies.js | adlar | Kullanıcı akışları veya 1.adımda oluşturduğunuz özel ilke. |
| policies.js | Yetkili | Kiracı Azure AD B2C adı (örneğin, contoso.onmicrosoft.com ). Ardından, yerine kullanıcı akışları veya 1. adımda oluşturduğunuz özel ilkeyi (örneğin, https://<your-tenant-name>.b2clogin.com/<your-tenant-name>.onmicrosoft.com/<your-sign-in-sign-up-policy> ) değiştirin. |
| policies.js | authorityDomain | Kiracı Azure AD B2C adı (örneğin, contoso.onmicrosoft.com ). |
| apiConfig.js | b2cScopes | 2.2. adımda oluşturduğunuz web API'si kapsamları (örneğin, b2cScopes: ["https://<your-tenant-name>.onmicrosoft.com/tasks-api/tasks.read"] ). |
| apiConfig.js | webApi | Web API'sinin URL'si, http://localhost:5000/tasks . |
Sonuçta elde edilen kodunuz aşağıdaki örnektekine benzer şekilde çalışmalı:
authConfig.js:
const msalConfig = {
auth: {
clientId: "<your-MyApp-application-ID>"
authority: b2cPolicies.authorities.signUpSignIn.authority,
knownAuthorities: [b2cPolicies.authorityDomain],
},
cache: {
cacheLocation: "localStorage",
storeAuthStateInCookie: true
}
};
const loginRequest = {
scopes: ["openid", "profile"],
};
const tokenRequest = {
scopes: apiConfig.b2cScopes
};
policies.js:
const b2cPolicies = {
names: {
signUpSignIn: "b2c_1_susi",
forgotPassword: "b2c_1_reset",
editProfile: "b2c_1_edit_profile"
},
authorities: {
signUpSignIn: {
authority: "https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/b2c_1_susi",
},
forgotPassword: {
authority: "https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/b2c_1_reset",
},
editProfile: {
authority: "https://your-tenant-name.b2clogin.com/your-tenant-name.onmicrosoft.com/b2c_1_edit_profile"
}
},
authorityDomain: "your-tenant-name.b2clogin.com"
}
apiConfig.js:
const apiConfig = {
b2cScopes: ["https://your-tenant-name.onmicrosoft.com/tasks-api/tasks.read"],
webApi: "http://localhost:5000/tasks"
};
4. Adım: Web API'si örnek kodunu alın
Web API'si kaydedildi ve kapsamlarını tanımladığınıza göre, web API kodunu kiracınız ile çalışacak Azure AD B2C yapılandırabilirsiniz.
Web API'si örnek kodunu almak için, aşağıdakilerden birini yapın:
Aşağıdaki komutu çalıştırarak GitHub web API'si projesini kopya edin:
git clone https://github.com/Azure-Samples/active-directory-b2c-javascript-nodejs-webapi.gitAyrıca doğrudan Azure-Samples/active-directory-b2c-javascript-nodejs-webapi projesine GitHub.
4.1. Adım: Web API'sini güncelleştirme
Kod düzenleyicide config.json dosyasını açın.
Değişken değerlerini, daha önce oluşturduğunuz uygulama kaydıyla değiştirme. Ve
policyNameönkoşulların bir parçası olarak oluşturduğunuz kullanıcı akışıyla güncelleştirin (örneğin, b2c_1_susi)."credentials": { "tenantName": "<your-tenant-name>", "clientID": "<your-webapi-application-ID>" }, "policies": { "policyName": "b2c_1_susi" }, "resource": { "scope": ["tasks.read"] },
4.2. Adım: CORS'yi etkinleştirme
Tek sayfalı uygulamanın web API'sini Node.js izin vermek için web API'sinde çıkış noktası arası kaynak paylaşımını (CORS) etkinleştirmeniz gerekir. Üretim uygulamasında isteği hangi etki alanının yaparken dikkatli olun. Bu örnekte, herhangi bir etki alanındaki isteklere izin ver.
CORS'yi etkinleştirmek için aşağıdaki ara yazılımı kullanın. İndirdiğiniz Node.js web API'si kod örneğinde, dosyanın index.jseklenmiştir.
app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type, Accept");
next();
});
5. Adım: SPA ve web API'sini çalıştırma
Artık tek sayfalı uygulamanın API'ye kapsamlı erişimini test etmeye hazırsınız. Yerel makineniz üzerinde Node.js web API'sini ve örnek JavaScript tek sayfalı uygulamasını çalıştırın. Ardından, tek sayfalı uygulamada oturum açma ve KORUMALı API'ye bir istek başlatmak için API'yi çağır düğmesini seçin.
Node.js web API'sini çalıştırma
Bir konsol penceresi açın ve web API'si örneğini içeren Node.js ile değiştirme. Örnek:
cd active-directory-b2c-javascript-nodejs-webapiAşağıdaki komutları çalıştırın:
npm install && npm update node index.jsKonsol penceresinde uygulamanın barındır bulunduğu bağlantı noktası numarası görüntülenir.
Listening on port 5000...
Tek sayfalı uygulamayı çalıştırma
Başka bir konsol penceresi açın ve JavaScript SPA örneğini içeren dizine tıklayın. Örnek:
cd ms-identity-b2c-javascript-spaAşağıdaki komutları çalıştırın:
npm install && npm update npm startKonsol penceresinde uygulamanın barındırıldı olduğu bağlantı noktası numarası görüntülenir.
Listening on port 6420...Uygulamayı görüntülemek için tarayıcınızda
http://localhost:6420'ye gidin.
Kaydolma veya oturum açma işlemini tamamlama. Başarıyla oturum açtıktan sonra "Kullanıcı oturum <your username> açtı" iletisiyle oturum açabilirsiniz.
API'yi çağır düğmesini seçin. SPA, erişim belirteci bir istekte korumalı web API'sinde gönderir ve bu da oturum açmış kullanıcının görünen adını döndürür:

Uygulamanızı dağıtma
Bir üretim uygulamasında, uygulama kaydı yeniden yönlendirme URI'si normalde, örneğin, uygulamanın çalıştırılma durumuna sahip genel olarak erişilebilen bir uç https://contoso.com/signin-oidc noktadır.
Kayıtlı uygulamalarınıza istediğiniz zaman yeniden yönlendirme URL'leri ekleyebilir ve değiştirebilirsiniz. Yeniden yönlendirme URL'leri için aşağıdaki kısıtlamalar geçerlidir:
- Yanıt URL'si düzeniyle başla
httpsolmalıdır. - Yanıt URL'si büyük/büyük/büyük harfe duyarlıdır. Bu dosyanın durumu, çalışan uygulamanın URL yolunun büyük/büyük/büyük harfle eşleşmesi gerekir.
Sonraki adımlar
Bu makalede ele alınan kavramlar hakkında daha fazla bilgi için: