Tarayıcılarda üçüncü taraf tanımlama bilgisi engellemeyi işleme
Birçok tarayıcı, tarayıcının adres çubuğunda gösterilen etki alanı dışındaki etki alanlarına yapılan isteklerde üçüncü taraf tanımlama bilgilerini, tanımlama bilgilerini engeller. Bu tanımlama bilgileri, etki alanları arası tanımlama bilgileri olarak da bilinir. Bu blok örtük akışı bozar ve kullanıcıların başarıyla oturum açması için yeni kimlik doğrulama desenleri gerektirir. Microsoft kimlik platformu, yetkilendirme kodu akışını Kod Değişimi için Proof Key (PKCE) ile birlikte kullanır ve üçüncü taraf tanımlama bilgileri engellendiğinde kullanıcıların oturum açmasını sağlamak için belirteçleri yenileriz. Kod Değişimi için Proof Key yaklaşımına sahip bu yetkilendirme kodu akışı örtük akış üzerinden önerilir.
Akıllı İzleme Koruması (ITP) ve Gizlilik Korumalı Alanı nedir?
Apple Safari'nin Akıllı İzleme Koruması veya ITP adlı varsayılan gizlilik koruma özelliği vardır. Chrome'un Gizlilik Korumalı Alanı adlı bir tarayıcı gizlilik girişimi vardır. Bu girişimler, tarayıcılar tarafından yapılan birçok farklı tarayıcı gizlilik çabasını kapsar ve farklı zaman çizelgelerine sahiptir. Her iki çaba da etki alanları arasında geçen isteklerde "üçüncü taraf" tanımlama bilgilerini engeller ve Safari ve Brave üçüncü taraf tanımlama bilgilerini varsayılan olarak engeller. Chrome kısa süre önce üçüncü taraf tanımlama bilgilerini varsayılan olarak engellemeye başlayacaklarını duyurdu. Gizlilik Korumalı Alanı, bölümlenmiş depolamada yapılan değişiklikleri ve üçüncü taraf tanımlama bilgisini engellemeyi içerir.
Yaygın bir kullanıcı izleme biçimi, arka planda üçüncü taraf siteye bir iframe yüklenerek ve kullanıcıyla İnternet arasında bağıntı kurmak için tanımlama bilgileri kullanılarak yapılır. Ne yazık ki, bu desen aynı zamanda tek sayfalı uygulamalarda (SPA) örtük akışı uygulamanın standart yoludur. Kullanıcı gizliliğini korumak için üçüncü taraf tanımlama bilgilerini engelleyen bir tarayıcı, SPA'nın işlevselliğini de engelleyebilir. Üçüncü taraf tanımlama bilgilerinin engellenmesi ve bununla ilişkili güvenlik riskleri nedeniyle SPA'larda örtük akışın kullanılması artık önerilmez.
Bu makalede özetlenen çözüm tüm bu tarayıcılarda veya üçüncü taraf tanımlama bilgilerinin engellendiği her yerde çalışır.
Çözüme genel bakış
SPA'larda kullanıcıların kimliğini doğrulamaya devam etmek için uygulama geliştiricilerinin yetkilendirme kodu akışını kullanması gerekir. Kimlik doğrulama kodu akışında kimlik sağlayıcısı bir kod oluşturur ve SPA, kodu erişim belirteci ve yenileme belirteci için kullanır. Uygulama yeni belirteçler gerektirdiğinde, yeni belirteçleri almak için yenileme belirteci akışını kullanabilir. JavaScript v2.0 ve üzeri için Microsoft Kimlik Doğrulama Kitaplığı (MSAL), SPA'lar için yetkilendirme kodu akışını uygular ve küçük güncelleştirmelerle MSAL.js 1.x'in yerine bir açılır listedir. SPA'yı örtük kod akışından kimlik doğrulama kodu akışına taşımaya yönelik geçiş kılavuzuna bakın.
Microsoft kimlik platformu için, SPA'lar ve yerel istemciler benzer protokol yönergelerini izler:
- PKCE kod sınamasının kullanımı
- Microsoft kimlik platformu SPA'lar için PKCE gereklidir. PKCE, yerel ve gizli istemciler için önerilir .
- İstemci gizli dizisi kullanımı yok
SPA'ların iki kısıtlaması daha vardır:
- Oturum açma uç noktaları üzerinde CORS'yi etkinleştirmek için yeniden yönlendirme URI'sinin tür
spa
olarak işaretlenmesi gerekir. - URI'leri yeniden yönlendirmek için
spa
yetkilendirme kodu akışı aracılığıyla verilen yenileme belirteçlerinin ömrü 90 gün yerine 24 saat sürer.
Performans ve UX etkileri
Örtük akış kullanan bazı uygulamalar, kullanarak prompt=none
bir oturum açma iframe'i açarak yeniden yönlendirme olmadan oturum açmayı dener. Çoğu tarayıcıda, bu istek şu anda oturum açmış olan kullanıcının belirteçleriyle yanıt verir (onay verildiği varsayılır). Bu desen, uygulamaların kullanıcının oturum açması için tam sayfa yeniden yönlendirmesine ihtiyaç duymadığı, performansı ve kullanıcı deneyimini geliştirdiği anlamına geliyordu. Kullanıcı web sayfasını ziyaret ediyor ve zaten oturum açmış durumda. prompt=none
Bir iframe'de üçüncü taraf tanımlama bilgileri engellendiğinde artık bir seçenek olmadığından, uygulamaların yetkilendirme kodunun verilmesi için oturum açma düzenlerini ayarlaması gerekir.
Üçüncü taraf tanımlama bilgileri olmadan oturum açma işlemini gerçekleştirmenin iki yolu vardır:
- Tam sayfa yeniden yönlendirmeleri
- SPA'nın ilk yükünde, oturum zaten yoksa (veya oturumun süresi dolduysa) kullanıcıyı oturum açma sayfasına yönlendirin. Kullanıcının tarayıcısı oturum açma sayfasını ziyaret eder, kullanıcı oturumunu içeren tanımlama bilgilerini sunar ve daha sonra kod ve belirteçler bir parça halinde uygulamaya yeniden yönlendirilir.
- Yeniden yönlendirme, SPA'nın iki kez yüklenmesine neden olur. Uygulamanın tam olarak iki kez indirilmeyecek şekilde SPA'ları önbelleğe almak için en iyi yöntemleri izleyin.
- Uygulamada, bir oturum açma oturumunu denetleyen ve uygulama javascript yükünü tamamen açıp yürütmeden önce oturum açma sayfasına yönlendiren bir ön yükleme sırasına sahip olmayı göz önünde bulundurun.
- Açılan Pencereler
- Tam sayfa yeniden yönlendirmesinin kullanıcı deneyimi (UX) uygulama için işe yaramazsa, kimlik doğrulamasını işlemek için bir açılır pencere kullanmayı göz önünde bulundurun.
- Açılan pencere kimlik doğrulamasından sonra uygulamaya yeniden yönlendirmeyi tamamladığında, yeniden yönlendirme işleyicisindeki kod kimlik doğrulama kodunu ve belirteçleri uygulamanın kullanması için yerel depolamada depolar. MSAL.js çoğu kitaplıkta olduğu gibi kimlik doğrulaması için açılır pencereleri destekler.
- Tarayıcılar açılır pencereler için desteği azaltarak en güvenilir seçenek olmayabilir. Tarayıcı gereksinimlerini karşılamak için açılır pencere oluşturmadan önce SPA ile kullanıcı etkileşimi gerekebilir.
Apple , özgün pencereye üçüncü taraf tanımlama bilgilerine erişim vermek için açılan bir yöntemi geçici bir uyumluluk düzeltmesi olarak tanımlar. Apple gelecekte bu izin aktarımını kaldırabilir ancak buradaki yönergeleri etkilemez.
Burada açılan pencere, oturum açma sayfasına birinci taraf gezintisi olarak kullanılır, böylece bir oturum bulunur ve bir kimlik doğrulama kodu sağlanabilir. Bu, gelecekte de çalışmaya devam etmelidir.
Geliştiriciler, üçüncü taraf tanımlama bilgileri engellendiğinde interacion_required hata oranının daha yüksek olduğu beklentisiyle kullanmaya prompt=none
devam edebilir. Sessiz belirteç alma sırasında hata oluşması durumunda her zaman etkileşimli bir yöntem geri dönüşü olması önerilmektedir.
iframe'leri kullanma
Web uygulamalarında yaygın olarak kullanılan bir desen, bir uygulamayı başka bir uygulamaya eklemek için iframe kullanmaktır: üst düzey çerçeve kullanıcının kimliğini doğrular ve iframe'de barındırılan uygulama kullanıcının oturum açtığına güvenerek örtük akışı kullanarak belirteçleri sessizce getirir. Ancak, üçüncü taraf tanımlama bilgilerinin tarayıcıda etkinleştirilip etkinleştirilmediğine veya engellenmesine bakılmaksızın bu varsayıma yönelik birkaç uyarı vardır.
Üçüncü taraf tanımlama bilgileri engellendiğinde sessiz belirteç alma işlemi artık çalışmıyor. Iframe'e eklenmiş olan uygulama, kullanıcının oturum açma sayfasına katıştırılmış bir çerçeve içinde gidilemediğinden kullanıcının oturumuna erişmek için açılır pencereleri kullanmaya geçmelidir.
Üst uygulamadan iframed uygulamasına bir kullanıcı (hesap) ipucu geçirerek, aynı kaynak ve çıkış noktaları arası JavaScript betik API'sine erişimi olan iframed ve üst uygulamalar arasında çoklu oturum açma elde edebilirsiniz. Daha fazla bilgi için bkz . GitHub'daki MSAL.js deposundaki iframed uygulamalarında MSAL.js kullanma.
Tarayıcıda yenileme belirteçlerinin güvenlik üzerindeki etkileri
Siteler arası betik (XSS) saldırıları veya güvenliği aşılmış JS paketleri yenileme belirtecini çalabilir ve süresi dolana veya iptal edilene kadar uzaktan kullanabilir. Uygulama geliştiricileri, uygulamalarının siteler arası betik oluşturma riskini azaltmakla sorumludur. Çalınmış yenileme belirteçleri riskini en aza indirmek için, SPA'lara yalnızca 24 saat geçerli belirteçler verilir. 24 saat sonra, uygulamanın oturum açma sayfasına üst düzey bir çerçeve ziyareti yoluyla yeni bir yetkilendirme kodu alması gerekir.
Bu sınırlı kullanım ömrü yenileme belirteci düzeni, güvenlik ile düşürülmüş UX arasında bir denge olarak seçilmiştir. Yenileme belirteçleri veya üçüncü taraf tanımlama bilgileri olmadan, yeni veya ek belirteçler gerektiğinde yetkilendirme kodu akışı (OAuth güvenliği en iyi geçerli uygulamalar taslağı tarafından önerilen şekilde) tek yönlü hale gelir. Bir belirtecin süresi her dolduğunda (genellikle Microsoft kimlik platformu belirteçler için saatte bir) her belirteç için tam sayfa yeniden yönlendirme veya açılır pencere gerekir.
Kullanıcı türüne özgü azaltmalar
Tüm kullanıcılar ve uygulamalar üçüncü taraf tanımlama bilgilerden tekdüzen olarak etkilenmez. Mimari veya cihaz yönetimi nedeniyle belirteçleri yenilemeye yönelik sessiz çağrıların üçüncü taraf tanımlama bilgileri olmadan yapılabilmesine neden olan bazı senaryolar vardır.
Yönetilen kurumsal cihaz senaryolarında, bazı tarayıcı ve platform bileşimleri cihaz Koşullu Erişim desteğine sahiptir. Kimlik doğrulama durumu tarayıcı yerine cihazdan gelebileceği için cihaz kimliğinin uygulanması üçüncü taraf tanımlama bilgileri gereksinimini en aza indirir.
Azure AD B2C uygulama senaryoları için müşteriler, uygulamanın etki alanıyla eşleşecek özel bir oturum açma etki alanı ayarlayabilir. Tanımlama bilgileri aynı etki alanında kaldığından (örneğin login.contoso.com
, için) tarayıcılar bu senaryoda üçüncü taraf tanımlama bilgilerini engellemez app.contoso.com
.
Üçüncü taraf tanımlama bilgileri olmadan Ön Kanal Oturumu Kapatma sınırlamaları
Bir kullanıcının SPA oturumu kapatıldığında, MSAL.js açılır veya yeniden yönlendirme oturumu kapatma yöntemini kullanmanızı önerir. Bu, sunucudaki ve tarayıcı depolamadaki kimlik doğrulama oturumunu temizler, ancak üçüncü taraf tanımlama bilgilerine erişim olmadan tüm federasyon uygulamalarının aynı anda oturum kapatma görmemesi riski vardır. Bu, OpenID Ön Kanal Oturumu Kapatma 1.0 belirtiminin bilinen bir sınırlamasıdır. Bunun kullanıcılar için anlamı, aynı kullanıcı için diğer uygulamalar için mevcut erişim belirteçlerinin son kullanma sürelerine kadar geçerli olmaya devam etmesidir. Kullanıcı A sekmesindeki A uygulamasının oturumunu kapatabilir, ancak B sekmesindeki B uygulaması erişim belirtecinin kalan geçerli süresi için oturum açmış olarak görünmeye devam eder. B uygulamasının belirtecinin süresi dolduğunda ve yeni bir belirteç almak için sunucuya bir çağrı yapıldığında, B uygulaması sunucudan oturumun süresinin dolduğunu belirten bir yanıt alır ve kullanıcının kimliğini doğrulamasını ister.
Microsoft'un oturum kapatma sayfası ve internet gizliliği en iyi yöntemleri , kullanıcıların bir uygulamada oturumu kapattıktan sonra tüm tarayıcı pencerelerini kapatmalarını önerir.
Sonraki adımlar
Yetkilendirme kodu akışı ve MSAL.js hakkında daha fazla bilgi için bkz: