tl; dr: Bunların hepsi güvenlik nedeniyle.
OAuth 2.0 bu iki kriteri karşılamak istedi:
- Geliştiricilerin HTTPS olmayan yönlendirme URI'sini kullanmalarına izin vermek istersiniz, çünkü tüm geliştiricilerin SSL etkin bir sunucusu yoktur ve eğer her zaman düzgün yapılandırılmazlar (kendinden imzalı olmayan, güvenilir SSL sertifikaları, senkronize sunucu saati ...).
- Bilgisayar korsanlarının istekleri keserek erişim / yenileme jetonlarını çalmasını istemezsiniz.
Detaylar aşağıda:
Örtük akış, güvenlik nedeniyle yalnızca tarayıcı ortamında mümkündür:
Olarak kapalı akış karma fragmanı (değil gibi bir URL parametresi) doğrudan geçirilir belirteç erişim. Karma parçasıyla ilgili önemli bir şey, karma parçası içeren bir bağlantıyı izlediğinizde, yalnızca tarayıcının karma parçasının farkında olmasıdır. Tarayıcılar karma parçasını doğrudan hedef web sayfasına (yönlendirme URI'sı / istemcinin web sayfası) iletir. Karma parçası aşağıdaki özelliklere sahiptir:
- HTTP isteğinin bir parçası değildir, bu nedenle sunucular tarafından okunamazlar ve bu nedenle aracı sunucular / yönlendiriciler tarafından yakalanamazlar (bu önemlidir).
- Yalnızca tarayıcıda (istemci tarafında) bulunurlar, bu nedenle karma parçasını okumanın tek yolu sayfada çalışan JavaScript kullanmaktır.
Bu, bir Erişim Sunucusu'nun aracı sunucu tarafından yakalanma riski olmadan doğrudan istemciye iletilmesini mümkün kılar. Bu, yalnızca olası istemci tarafı olma uyarısına sahiptir ve erişim belirtecini kullanmak için istemci tarafında çalışan javascript gerekir.
Örtük akış ayrıca geçici çözüm / kaçınmak için daha fazla mantık gerektiren güvenlik sorunlarına da sahiptir:
- Saldırgan, farklı bir web sitesindeki / uygulamadaki bir kullanıcıdan erişim jetonu alabilir (diyelim diğer web sitesinin / uygulamanın sahibi olup olmadığını), jetonu web sitelerine kaydedebilir ve ardından web sitenize bir URL parametresi olarak iletebilir bu nedenle kullanıcıyı web sitenizde taklit eder. Bundan kaçınmak için, jetonun kendi müşteri kimliğinizle (yani kendi uygulamanız tarafından) verildiğinden emin olmak için erişim belirteciyle ilişkili Müşteri Kimliğini (örneğin, Google için tokeninfo uç noktasını kullanabilirsiniz) kontrol etmeniz veya imzayı kontrol etmeniz gerekir. bir IDToken kullanıyorsanız (ancak bu istemcinizin sırrını gerektirir).
- Yetkilendirme isteği kendi mülkünüzden gelmediyse (Oturum Sabitleme saldırıları olarak adlandırılır), bundan kaçınmak için web sitenizden rastgele bir karma oluşturmak, bunu bir çereze kaydetmek ve aynı karma değerini durum URL parametresine aktarmak istersiniz. auth isteği, kullanıcı geri geldiğinde durum parametresini çerezle kontrol edersiniz ve eşleşmesi gerekir.
In yetki kodu akış o URL parametreleri, bu nedenle herhangi bir aracı sunucu / isteğiniz geçerdi hangi yönlendiriciler (yüzlerce olabilir) mümkün olabilir HTTP isteği parçası olduğundan bir URL parametresinde doğrudan jetonun bir erişim geçmek mümkün değildir Ortadaki Man saldırıları olarak bilinenlere izin veren şifrelenmiş bağlantı (HTTPS) kullanmıyorsanız erişim belirtecini okuyun.
Erişim belirtecini doğrudan bir URL parametresine geçirmek teorik olarak mümkün olabilir, ancak yetkilendirme sunucusu yeniden yönlendirme URI'sının TLT şifrelemeli HTTPS ve 'güvenilir' bir SSL sertifikası (genellikle ücretsiz olmayan bir Sertifika Yetkilisi'nden) kullandığından emin olmalıdır. Hedef sunucunun yasal olduğundan ve HTTP isteğinin tamamen şifreli olduğundan emin olmak için. Tüm geliştiricilerin bir SSL sertifikası satın almaları ve alan adlarında SSL'yi düzgün bir şekilde yapılandırmaları büyük bir acı olur ve benimsenmeyi çok yavaşlatır. Bu nedenle, bir kerelik bir kullanımlık "yetkilendirme kodu", yalnızca meşru alıcının değiş tokuş edebilmesi (istemci sırrına ihtiyacınız olduğu için) ve kodun şifrelenmemiş işlemler üzerinden istekleri kesen potansiyel bilgisayar korsanları için işe yaramayacağı şekilde sağlanır. (çünkü onlar
Örtülü akışın daha az güvenli olduğunu, yeniden yönlendirme üzerine alan adının taklit edilmesi gibi potansiyel saldırı vektörleri olduğunu da iddia edebilirsiniz - örneğin, müşterinin web sitesinin IP adresini ele geçirerek. Bu, örtük akışın yalnızca (sınırlı bir zaman kullanımı olması beklenen) erişim belirteçleri vermesinin ve asla (zaman içinde sınırsız olan) belirteçleri yenilememesinin nedenlerinden biridir. Bu sorunu çözmek için, web sayfalarınızı mümkün olduğunda HTTPS etkin bir sunucuda barındırmanızı öneririz.