Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Varsayılan olarak, bir uygulama bir iframe içinde işlendiğinde MSAL Microsoft Entra ID kimlik doğrulama uç noktasına tam çerçeve yeniden yönlendirmelerini engeller; bu da IdP ile kullanıcı etkileşimi için yeniden yönlendirme API'lerini kullanamayacağınız anlamına gelir:
- Bu kısıtlama, Microsoft Entra ID'nin clickjacking saldırılarını önlemek amacıyla alınmış bir önlem olarak, kullanıcı etkileşimi gerektiren herhangi bir istemi (ör. kimlik bilgisi girişi, onay, oturumu kapatma vb.) bir iframe içinde
X-FRAME OPTIONS SET TO DENYhatasını vererek görüntülemeyi reddetmesi nedeniyle uygulanır. - Bunun yerine, kullanıcı etkileşimi gerekiyorsa MSAL'nin açılır API'lerine ve kullanıcı etkileşimi önlenebiliyorsa sessiz API'lere (
ssoSilent(),acquireTokenSilent()) güvenmeniz gerekir. - Benzer şekilde, oturum kapatma işlemleri için logoutPopup() API'sini kullanmanız gerekir (:uyarı: Uygulamanız v2.13'ten eski bir sürüm
msal-browserkullanıyorsa, api'yi yükseltip değiştirdiğinizdenlogout()emin olun çünkü Microsoft Entra ID'e tam çerçeve yeniden yönlendirmeyi deneyecektir). -
Popup API'lerini kullanırken, üst uygulama tarafından uygulanan sandboxing kısıtlamalarını dikkate almanız gerekir. Özellikle, iframe korumalı alana alındığında üst uygulamanın
allow-popupsbayrağını ayarlaması gerekir.
Azure AD B2C, iframe'de özel oturum açma kullanıcı arabirimini işlemeye olanak tanıyan ekli oturum açma deneyimi sunar. MSAL varsayılan olarak iframe'lerde yeniden yönlendirmeyi önlediğinden, bu özelliği kullanmak için allowRedirectInIframe yapılandırma seçeneğini true olarak ayarlamanız gerekir. Yukarıdaki kısıtlama nedeniyle Microsoft Entra ID'da uygulamalar için bu seçeneği etkinleştirmenin önerilmediğini unutmayın.
Tarayıcı kısıtlamaları
Bir iframe içindeki Microsoft Entra oturum tanımlama bilgileri üçüncü taraf tanımlama bilgileri olarak kabul edildiğinden, bazı tarayıcılar (örneğin Gizli modda Safari veya Chrome) bu tanımlama bilgilerini varsayılan olarak engeller veya temizler. Bu, IdP'nin oturum tanımlama bilgilerine erişmeyecekleri için iframed uygulamaları için çoklu oturum açma deneyimini etkiler (bkz. Çoklu oturum açma).
Ayrıca, Chrome'da 3. taraf tanımlama bilgileri devre dışı bırakıldığında iframed MSAL uygulamalarının yerel veya oturum depolamaya erişimi olmaz. MSAL, bu durumda bellek içi depolamaya geri dönüş yapacaktır.
Tek oturum açma
Ana uygulamadan iframe içindeki uygulamaya bir hesap ipucu iletirseniz, iframe içindeki uygulama ile ana uygulama arasında tek oturum açmayı, aynı kaynakvefarklı kaynaklar arasında gerçekleştirebilirsiniz.
Aynı çıkış noktası olan uygulamalar
Aynı çıkış noktası olan Iframed ve üst uygulamalar aynı MSAL.js önbellek örneğine erişebilir ve her iki uygulamanın da MSAL'yi önbelleğe alma için yerel depolamayı kullanacak şekilde yapılandırması koşuluyla istem olmadan oturum açabilir. Daha fazla bilgi için bkz. MSAL.jsile çoklu oturum açma
Kaynaklar arası uygulamalar
Farklı origin’lere sahip iframe içine gömülü uygulamalar ile üst uygulamalar, tek oturum açmayı elde etmek için ssoSilent() API’sini kullanabilir. Bunu yapmak için üst uygulamanın iframed uygulamasına bir hesap, loginHint (kullanıcı adı) veya oturum kimliği (sid) geçirmesi gerekir.
Uygulamalar yukarıdaki parametrelerden herhangi biri olmadan kullanmayı ssoSilent deneyebilir. Ancak, kullanıcının oturumu hakkında herhangi bir bilgi sağlamadan kullanırken ssoSilent olduğunu unutmayın.
Iframe içindeki uygulamalar ile ana uygulamalar arasında farklı kaynaklar arası iletişim için değerlendirebileceğiniz birkaç alternatif vardır:
- Üst uygulamada iframe'in kaynağına sorgu parametreleri ekleyebilir ve bunları daha sonra alt uygulamada alabilirsiniz:
// Create the main myMSALObj instance
// configuration parameters are located at authConfig.js
const myMSALObj = new msal.PublicClientApplication({
auth: {
clientId: "ENTER_CLIENT_ID",
authority: "https://login.microsoftonline.com/ENTER_TENANT_ID",
redirectUri: "/redirect", // set to a blank page for handling auth code response via popups
},
cache: {
cacheLocation: "localStorage", // set your cache location to local storage
},
});
window.onload = () => {
const urlParams = new URLSearchParams(window.location.search);
const sid = urlParams.get("sid");
// attempt SSO
myMSALObj.ssoSilent({
sid: sid
}).then((response) => {
// do something with response
}).catch(error => {
// handle errors
});
}
- postMessage() API’sini üst uygulamada kullanabilir ve alt uygulamada ileti olaylarını dinleyebilirsiniz:
// Create the main myMSALObj instance
// configuration parameters are located at authConfig.js
const myMSALObj = new msal.PublicClientApplication({
auth: {
clientId: "ENTER_CLIENT_ID",
authority: "https://login.microsoftonline.com/ENTER_TENANT_ID",
redirectUri: "/redirect", // set to a blank page for handling auth code response via popups
},
cache: {
cacheLocation: "localStorage", // set your cache location to local storage
},
});
const parentDomain = "http://localhost:3001";
window.addEventListener("message", (event) => {
// check the origin of the data
if (event.origin === parentDomain) {
const sid = event.data;
// attempt SSO
myMSALObj.ssoSilent({
sid: sid
}).then((response) => {
// do something with response
}).catch(error => {
// handle errors
});
}
});
Hata yönetimi
ssoSilent() başarısız olursa, hataları yakalayıp işlemelisiniz. Özellikle:
- InteractionRequiredError: izin gerekiyorsa, kullanıcının MFA gibi ek doğrulama adımlarını tamamlaması gerekiyorsa vb. durumlarda fırlatılır. Bu hata çoğu zaman basitçe etkileşimli bir API çağrısı başlatılarak ele alınabilir.
-
BrowserAuthError: hiç hesap ipucu sağlanmazsa ya da geçersiz bir hesap ipucu sağlanırsa, açılır pencereler engellenirse vb. durumlarda fırlatılır.
errorCodeöğesini incelemeniz ve bunları uygun şekilde ele almanız gerekir.
myMSALObj.ssoSilent({
sid: sid
}).then((response) => {
// do something with response
}).catch(error => {
if (error instanceof msal.InteractionRequiredAuthError) {
myMSALObj.loginPopup()
.then((response) => {
// do something with response
});
} else if (error instanceof msal.BrowserAuthError) {
if (error.errorCode === "silent_sso_error") {
// e.g. username is null
}
if (error.errorCode === "popup_window_error") {
// e.g. popups are blocked
}
} else {
console.log(error);
}
});
Kullanıcı etkileşimi
IdP ile kullanıcı etkileşimi gerektiren iletişimi en aza indirmek istiyorsanız veya herhangi bir nedenle açılır pencerelerle ilgili sorun yaşıyorsanız, göz önünde bulundurabileceğiniz bazı seçenekler vardır:
Yönetici onayı verin. Bu, kullanıcılar ilk kez oturum açarken uygulamanızın gerektirdiği izin istemlerinin olmamasını sağlar.
İstemci uygulamalarını önceden yetkilendirin. Bu, istemci uygulamalarınız tarafından çağrıldığında web API'nizin gerektirdiği izinler için onay istemleri olmamasını sağlar.
Tek oturum kapatma
MSAL.js'yi, iframe içindeki ve üst uygulama arasında tek oturum kapatma etkisi elde etmek için ön kanal oturum kapatma URI'si ile kullanabilirsiniz. Örneğin, kullanıcıların ana uygulamada oturumu kapattıklarında iframe içindeki uygulamalarda da oturumlarının otomatik olarak kapatılmasını istiyorsanız, iframe içindeki uygulamalar için ön kanal oturum kapatmayı etkinleştirmeniz gerekir. Bunu yapmak için lütfen şu konuya bakın: Ön kanal oturum kapatma URI’sini yapılandırma.