SORU
31 Mayıs 2011, Salı


Nasıl istemci kimlik bilgilerini gizli tutmak, OAuth2'in Kaynak Sahibi kullanırken Parola Kimlik bilgilerini yazın hibe

Bir dinlenme hizmet binası ve yetkilendirme için OAauth 2 kullanmak istiyoruz. current draft (Mayıs-v2-16, 19) four grant types açıklar. Mekanizmaları veya yetki almak için akar (access token).

  1. Yetki Kodu
  2. Örtülü Verin
  3. Kaynak Sahibinin Kimlik Bilgileri
  4. İstemci Kimlik Bilgileri

Farklı amaçlara hizmet beri dördü de desteğine ihtiyacımız var gibi görünüyor. İlk iki (ve muhtemelen sonuncu) API erişim ihtiyacı olan üçüncü parti uygulamalar tarafından kullanılıyor olabilir. Yetki kodu standart yol yetki bir web uygulaması için yeterince şanslı üzerinde bulunan bir güvenli sunucu, örtülü hibe akışı olur seçim için bir istemci uygulama mi? kesinlikle kimlik bilgilerini gizli tutmak (örn: mobil/masaüstü uygulama, JavaScript, istemci, vb.).
İstediğimiz kullanmak için üçüncü mekanizma kendimiz sağlamak daha iyi bir kullanıcı deneyimi ile mobil cihazlar almak yerine kullanıcı için bir oturum açma iletişim kutusunda bir web tarayıcısı ve kullanıcı kolayca girin kendi kullanıcı adı ve şifre doğrudan uygulama ve oturum açma. Biz de İstemci Kimlik Bilgileri grant türü kamu verileri görüntülemek için kullanılan bir access token almak için kullanmak için herhangi bir kullanıcı ile ilişkili değil. Bu durumda bu, o kadar çok izin, ama oldukça benzer bir şey için bir API anahtarı kullanmak için erişim vermek sadece uygulamalar var kayıtlı olan bize vererek, bize bir seçenek için erişimi iptal et gerekirse.

Bu yüzden benim sorular şunlardır:

  1. Doğru hibe farklı türleri amacını anlamadım mı sanıyorsun?
  2. Nasıl istemci kimlik bilgilerinizi gizli tutar mısın? Her ikisi de üçüncü ve dördüncü durumda, iyi bir fikir gibi gelmiyor istemci, istemci ve istemci kimliği gizli bir yere ihtiyacımız var.
  3. Örtülü hibe türünü kullanın ve müşteri sırrını ifşa bile, uygulamanızı aynı yetkilendirme mekanizması ve müvekkilin kimliği kullanarak taklit başka bir uygulama ne durdurur?

Özetlemek gerekirse, bir istemci uygulaması, İstemci Kimlik Bilgileri ve kaynak sahibinin kimlik bilgileri akış kullanmak mümkün olmak istiyorum. Bu akımların her ikisi de istemci gizli bir şekilde saklamak için gerektirir, ancak istemci Mobil veya JavaScript bir uygulama olduğunu, bu kolayca çalınmış olabilir.

CEVAP
2 HAZİRAN 2011, PERŞEMBE


Benzer sorunlar karşı karşıyayım da nispeten yeni OAuth için. Ettim uygulanan "Kaynak Sahibi Parola Kimlik" bizim API için bizim resmi mobil uygulaması için kullanmak ... web akışı gibi gelecekler kadar korkunç kullanın bir mobil platform, ve bir kez kullanıcı yükler bir uygulama ve güvendiği bu bizim resmi app, onlar gerektiğini hissediyorum rahat yazarak kullanıcı adı/parola doğrudan app.

Sorun, senin de işaret ettiğin gibi, API server, güvenli bir şekilde app client_id doğrulamak için bir yolu yoktur. Eğer uygulama kodu/paketinde bir client_secret ben dahil ederseniz, o zaman app yükler herkesin maruz kaldığı bir client_secret gerektiren sürecini daha güvenli hale gelecekti. Yani temelde, başka bir uygulama client_id kopyalayarak uygulamam bürünebilir.

Sadece puan her cevap yönlendirmek için:

  1. Ben yeniden okuma spec farklı taslaklar halinde değişen bir şey olup olmadığını görmek için devam, ve çoğunlukla Kaynak Sahibi Parola Kimlik bilgileri bölümüne odaklanmış, ama bu doğru olduğunu düşünüyorum. İstemci Kimlik Bilgileri(4) bence de olabilir kullanılan bir içi veya üçüncü taraf hizmet gerekebilir erişmek için Sadece "ortak" bilgi, belki de sana analytics ya da bir şey lazım bilgi karşısında tüm kullanıcılar.

  2. Hiçbir şey istemci gizli tutabileceğini sanmıyorum.

  3. Hiçbir şey, bir istemci kimliği kullanarak başka biri durur. Bu da benim sorunum. Kodunuzu sunucu bırakır ve ya bir uygulama olarak yüklenir veya bir tarayıcıda Javascript olarak çalışmaya başladığında, hiçbir şey gizli olduğunu kabul edemeyiz.

Web sitemiz için, İstemci Kimlik akışı ile tarif ettiğinize benzer bir sorun vardı. İşini bitiren sunucu tarafında kimlik doğrulaması hareket ediyor. Kullanıcı web app kullanarak kimlik olabilir, ama bizim için OAuth API token sunucu tarafında saklanır ve kullanıcının web oturumu ile ilişkilidir. Javascript kodu yapan tüm API istekleri aslında web sunucusu için AJAX çağrıları. Tarayıcı doğrudan API ile doğrulanmış değil, ancak bunun yerine, kimliği doğrulanmış bir oturum var.

Bu üçüncü parti uygulamalar bahsediyorsun İstemci Kimlik bilgilerini kullanmak için durum farklıdır senin gibi görünüyor ve sadece bu yöntemle toplu veri hizmet vermekteyiz. Bence kaygıları, geçerli (herkes yapabilir çalmak ve kullanmak başkasının API anahtarı), ama eğer sadece gerektirir ücretsiz bir kayıt almak için bir API anahtarı, anlayamıyorum, neden kimse gerçekten çalmak istiyorsun.

Monitör/hangi noktada bir API anahtarı geçersiz ve yasal kullanıcı yeni bir tane verebilir istismar tespit etmek için denemek için her API anahtarı, kullanım analiz edersiniz. Bu en iyi seçenek olabilir, ama hiçbir şekilde güvenli değil.

Ayrıca eğer gerçekten kazanmak istiyorsunuz ne kadar bilmiyorum ama biraz daha sıkı kilitle istersen bunun için bir Belirteç gibi bir Yenileme planı kullanabilirsiniz. Eğer süresi dolmuş Javascript maruz apı belirteçleri günde bir kez ve gerekli üçüncü taraf için bir tür sunucu tarafı yenilemek kullanarak bir (gizli) yenileme token, daha sonra çalıntı apı belirteçleri asla iyi olmak için daha fazla bir gün. Potansiyel belirteç hırsızları teşvik etmek yerine, sadece kayıt için. Ama emin değilim bu yüzden herkes için bir ağrı, bir bakıma eğer bu değer eğer.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • george sarintzotis

    george sarin

    2 Aralık 2007
  • GoProTutorials

    GoProTutoria

    18 NİSAN 2011
  • TV nEW

    TV nEW

    25 AĞUSTOS 2012