Açıklama: Mobil Uygulama = Yerel Uygulama
Diğer yorumlarda ve çevrimiçi birkaç kaynakta belirtildiği gibi, örtük, mobil uygulamalar için doğal bir uygunluk gibi görünmektedir, ancak en iyi çözüm her zaman kesin değildir (ve aslında aşağıda tartışılan nedenlerden dolayı dolaylı olarak önerilmemektedir).
Yerel Uygulama OAuth2 En İyi Uygulamaları
Hangi yaklaşımı seçerseniz seçin (dikkate alınması gereken birkaç değiş tokuş vardır), OAuth2 kullanan Yerel Uygulamalar için burada özetlenen en iyi uygulamalara dikkat etmelisiniz: https://tools.ietf.org/html/rfc8252
Aşağıdaki seçenekleri düşünün
Örtük
Örtük kullanmalı mıyım?
Bölüm 8.2'den alıntı yapmak için https://tools.ietf.org/html/rfc8252#section-8.2
OAuth 2.0 örtük izin yetkilendirme akışı (OAuth 2.0 [RFC6749] Bölüm 4.2'de tanımlanmıştır) genellikle tarayıcıda yetkilendirme isteğini gerçekleştirme ve yetkilendirme yanıtını URI tabanlı uygulamalar arası iletişim yoluyla alma uygulamasıyla çalışır.
Ancak, örtülü akış PKCE [RFC7636] tarafından korunamadığından (Bölüm 8.1'de gereklidir), Örtük Akışın yerel uygulamalarla kullanılması ÖNERİLMEZ .
Örtülü akış yoluyla verilen erişim belirteçleri, kullanıcı etkileşimi olmadan da yenilenemez, bu da yetkilendirme kodu verme akışını (yenileme belirteçleri verebilir), erişim belirteçlerinin yenilenmesini gerektiren yerel uygulama yetkilendirmeleri için daha pratik bir seçenek haline getirir.
Yetki Kodu
Yetkilendirme Kodu ile devam ederseniz, bir yaklaşım, cihazlardaki dağıtılmış uygulamada saklamaktan kaçınmak için belirteç isteklerini istemci sırrı ile zenginleştiren kendi web sunucusu bileşeniniz aracılığıyla proxy yapmak olacaktır.
Aşağıdaki alıntı: https://dev.fitbit.com/docs/oauth2/
Yetkilendirme Kodu Verme akışı, web hizmeti olan uygulamalar için önerilir. Bu akış, bir uygulamanın istemci sırrı kullanılarak sunucudan sunucuya iletişim gerektirir.
Not: İstemci sırrınızı asla bir uygulama mağazası veya istemci tarafı JavaScript aracılığıyla indirilen uygulamalar gibi dağıtılmış koda koymayın.
Web hizmeti olmayan uygulamalar Örtük Hibe akışını kullanmalıdır.
Sonuç
Nihai karar, istediğiniz kullanıcı deneyimini hesaba katmalı, aynı zamanda kısa listeye alınmış yaklaşımlarınız için uygun bir risk değerlendirmesi yaptıktan ve sonuçları daha iyi anladıktan sonra risk iştahınızı da hesaba katmalıdır.
Harika bir okuma burada https://auth0.com/blog/oauth-2-best-practices-for-native-apps/
Başka bir tanesidir https://www.oauth.com/oauth2-servers/oauth-native-apps/ olan durumları
Sektördeki mevcut en iyi uygulama, istemci sırrını çıkarırken Yetkilendirme Akışını kullanmak ve akışı tamamlamak için harici bir kullanıcı aracısı kullanmaktır. Harici bir kullanıcı aracısı, tipik olarak cihazın yerel tarayıcısıdır (yerel uygulamadan ayrı bir güvenlik alanıyla), böylece uygulama çerez deposuna erişemez veya tarayıcı içindeki sayfa içeriğini inceleyemez veya değiştiremez.
PKCE Değerlendirmesi
Burada açıklanan PKCE'yi de dikkate almalısınız. https://www.oauth.com/oauth2-servers/pkce/
Özellikle, Yetkilendirme Sunucusunu da uyguluyorsanız, https://www.oauth.com/oauth2-servers/oauth-native-apps/checklist-server-support-native-apps/ şunları yapmanız gerektiğini belirtir
- İstemcilerin, yönlendirme URL'leri için özel URL şemaları kaydetmelerine izin verin.
- Masaüstü uygulamalarını desteklemek için, rastgele bağlantı noktası numaralarına sahip geri döngü IP yönlendirme URL'lerini destekleyin.
- Yerel uygulamaların bir sır saklayabileceğini varsaymayın. Tüm uygulamaların herkese açık mı yoksa gizli mi olduğunu beyan etmesini ve yalnızca gizli uygulamalar için istemci sırlarını yayınlamasını zorunlu kılın.
- PKCE uzantısını destekleyin ve genel istemcilerin kullanmasını gerektirir.
- Yetkilendirme arayüzünün bir sistem tarayıcısında başlatmak yerine yerel bir uygulamanın web görünümüne ne zaman yerleştirildiğini tespit etmeye çalışın ve bu istekleri reddedin.
Web Görünümlerinde Dikkat Edilmesi Gerekenler
Vahşi ortamda Web Görünümleri, yani gömülü bir kullanıcı aracısı kullanan birçok örnek vardır, ancak bu yaklaşımdan kaçınılmalıdır (özellikle uygulama birinci taraf olmadığında) ve bazı durumlarda alıntı olarak bir API kullanmanız yasaklanabilir. buradan aşağıda gösteriyor
OAuth 2.0 kimlik doğrulama sayfasını yerleştirmeye yönelik herhangi bir girişim, uygulamanızın Fitbit API'sinden yasaklanmasıyla sonuçlanacaktır.
Güvenlik değerlendirmesi için, OAuth 2.0 yetkilendirme sayfası özel bir tarayıcı görünümünde sunulmalıdır. Fitbit kullanıcıları, yalnızca tarayıcı tarafından sağlanan URL çubuğu ve Taşıma Katmanı Güvenliği (TLS) sertifika bilgileri gibi araçlara sahiplerse orijinal Fitbit.com sitesi ile kimlik doğruladıklarını onaylayabilirler.
Yerel uygulamalar için bu, yetkilendirme sayfasının varsayılan tarayıcıda açılması gerektiği anlamına gelir. Yerel uygulamalar, kullanıcıyı yeniden tarayıcıdan izin isteyen uygulamaya yeniden yönlendirmek için yönlendirme URI'leri olarak özel URL şemalarını kullanabilir.
iOS uygulamaları, Safari'ye uygulama geçişi yerine SFSafariViewController sınıfını kullanabilir. WKWebView veya UIWebView sınıfının kullanılması yasaktır.
Android uygulamaları, uygulamanın varsayılan tarayıcıya geçişi yerine Chrome Özel Sekmelerini kullanabilir. WebView kullanımı yasaktır.
Daha fazla açıklığa kavuşturmak için, yukarıda sağlanan en iyi uygulama bağlantısının önceki taslağının bu bölümünden bir alıntı aşağıda verilmiştir
Genellikle web görünümleriyle uygulanan gömülü kullanıcı aracıları, yerel uygulamaları yetkilendirmek için alternatif bir yöntemdir. Bununla birlikte, tanım gereği üçüncü şahıslar tarafından kullanılmaları güvenli değildir. Kullanıcıların tam oturum açma kimlik bilgileriyle oturum açmasını, yalnızca daha az güçlü OAuth kimlik bilgilerine indirgemelerini içerir.
Güvenilir birinci taraf uygulamalar tarafından kullanıldığında bile, gömülü kullanıcı aracıları ihtiyaç duyduklarından daha güçlü kimlik bilgileri elde ederek en az ayrıcalık ilkesini ihlal eder ve potansiyel olarak saldırı yüzeyini artırır.
Gömülü kullanıcı aracılarının tipik web görünümü tabanlı uygulamalarında, ana bilgisayar uygulaması: kullanıcı adlarını ve parolaları yakalamak için forma girilen her tuş vuruşunu günlüğe kaydedebilir; formları otomatik olarak gönderin ve kullanıcı onayını atlayın; oturum tanımlama bilgilerini kopyalayın ve kullanıcı olarak kimliği doğrulanmış eylemler gerçekleştirmek için kullanın.
Kullanıcıları, normal adres çubuğu ve tarayıcıların sahip olduğu diğer kimlik özellikleri olmadan gömülü bir web görünümüne kimlik bilgilerini girmeye teşvik etmek, kullanıcının meşru sitede oturum açıp açmadığını bilmesini imkansız hale getirir ve oturum açsalar bile onları eğitir. önce siteyi doğrulamadan kimlik bilgilerini girmenin sorun olmadığı.
Güvenlik endişelerinin yanı sıra, web görünümleri kimlik doğrulama durumunu diğer uygulamalarla veya sistem tarayıcısıyla paylaşmaz, kullanıcının her yetkilendirme isteği için oturum açmasını gerektirir ve kötü bir kullanıcı deneyimine yol açar.
Yukarıdakilerden dolayı, güvenilir bir birinci taraf uygulamasının diğer uygulamalar için harici kullanıcı aracısı görevi görmesi veya birden çok birinci taraf uygulaması için tek oturum açma sağlaması dışında, gömülü kullanıcı aracılarının kullanılması ÖNERİLMEZ.
Yetkilendirme sunucuları, mümkün olduğunda kendilerine ait olmayan gömülü kullanıcı aracıları aracılığıyla oturum açma işlemlerini algılamak ve engellemek için adımlar atmayı düşünmelidir.
Burada bazı ilginç noktalar da dile getirilmiştir: /security/179756/why-are-developers-using-embedded-user-agents-for-3rd-party-auth-what-are-the- a