SORU
28 Ocak 2013, PAZARTESİ


passport.js Dinlendirici auth

Nasıl bir kimlik doğrulama (yerel ve Facebook, örneğin) bir web arayüzü ile Dinlendirici bir API aracılığıyla yerine passport.js kullanarak ele?

Belirli endişeleri Huzurlu bir yanıt (JSON) geri gelen veri geçişini vs tipik bir res kullanarak işleme.({ data: talep gönder.veri }), kurma, bir başlangıç giriş /bitiş noktası olan yönlendirmeleri için Facebook (/login erişilemiyor üzerinden AJAX, çünkü değil bir JSON yanıt - yönlendirmek için Facebook ile bir geri arama).

https://github.com/halrobertson/test-restify-passport-facebook, ama bunu anlamakta zorlanıyorum buldum.

Ayrıca, nasıl passport.js auth kimlik bilgilerini saklamak mı? Sunucu (ya da hizmettir?) MongoDB tarafından desteklenen ve kimlik bilgilerini (pw giriş ve tuzlu hash) orada saklı olmasını beklerdim, ama eğer passport.js bu imkanlarının var mı bilmiyorum.

CEVAP
27 Mayıs 2013, PAZARTESİ


Orada birçok soru sordu burada, görünen o halde soru sorulur bağlamında Düğüm ve passport.js gerçek sorular hakkında daha fazla akışı daha ne kadar bunu yapmak için belirli bir teknoloji.

Hadi kullanın @örnek Kur Keith, daha fazla güvenlik için biraz değişiklik:

  • https://example.com Web server istemci uygulaması Javascript tek bir sayfa hizmet vermektedir
  • https://example.com/api dinlendirici web servis zengin istemci uygulaması için sunucu desteği sağlar
  • Sunucu Düğümü ve passport.js devam etmektedir.
  • Sunucu "" tablo. kullanıcıların bir veritabanına sahip (herhangi bir tür)
  • Kullanıcı adı/kimlik doğrulama seçenekleri sunuyor şifre ve Facebook Bağlayın
  • Zengin istemci yapar https://example.com/api içine istekleri bekletin
  • https://example.com/api web hizmeti kullanan diğer müşteriler (telefon uygulamaları, örneğin) olabilir ama https://example.com web server hakkında bilgim yok.

Güvenli HTTP kullanıyorum unutmayın. Bu şifre ve yetkilendirme belirteçleri gibi hassas bilgileri istemci ve sunucu arasında geçiyor bu yana açık olan herhangi bir hizmet için bence şarttır.

Kullanıcı adı/parola kimlik doğrulaması

Bakalım nasıl düz eski ilk işleri bak.

  • Kullanıcı https://example.com bağlanır
  • Sunucu ilk sayfa yapar, zengin bir Javascript uygulama hizmet vermektedir. Sayfa Somehwere bir giriş formu var.
  • Bu tek sayfa uygulama bölümleri çok veri kullanıcı nedeniyle oturum ile doldurulan değil. Tüm bu bölümler bir olay "" olay. login dinleyicisi var Tüm bu istemci tarafı şeyler, sunucu bu olayları bilmiyor.
  • Kullanıcı, kullanıcının oturum açma ve kullanıcı adı kaydı ve istemci tarafı değişken parola için bir Javascript işleyicisi tetikler şifre ve hit gönder düğmesine girer. Bu işleyici "" olay. oturum açma Tetikleyicileri Yine, bu yan eylem tüm istemcikimlik bilgilerini sunucuya gönderilen henüz değildi.
  • ""Olay çağrılır. login dinleyici Bunların her biri şimdi https://example.com/api Dinlendirici bir API için bir veya daha fazla istekleri göndermek için Kullanıcı sayfasında işlemek için belirli verileri elde etmek gerekiyor. Her isteği göndermek için bir web hizmeti içerecektir kullanıcı adı ve parola, muhtemelen formun HTTP Basic kimlik doğrulama, beri servis Dinlendirici değil izin korumak için istemci devletten bir talep gelecek. Web hizmet HTTP güvenli olduğundan parola güvenli iletim sırasında şifreli.
  • https://example.com/api web hizmeti tek istekleri bir grup, kimlik bilgileri ile her alır. Her istekte kullanıcı adı ve parola kullanıcı veritabanında kontrol edilir ve eğer doğru bulunursa, istenen işlevini yürütür ve verileri JSON formatında istemciye döndürülür. Eğer kullanıcı adı ve şifre aynı değilse bir hata 401 HTTP hata kodu şeklinde istemciye gönderilir.
  • Yerine zorlama müşterilerine göndermek için kullanıcı adı ve şifre ile her istek bir "get_access_token" fonksiyonu içinde Rahat hizmet alır kullanıcı adı ve parola ve yanıtlar ile bir simge, bir çeşit şifreleme karma benzersiz ve bazı son kullanma tarihi ile ilgili. Bu simgeleri her bir kullanıcı ile veritabanına kaydedilir. Sonra istemci erişimi sonraki istekleri token gönderir. Erişim belirteci sonra kullanıcı adı ve parola yerine veritabanında doğrulanmış olacak.
  • Sigara tarayıcı istemci uygulamalar gibi telefon uygulamaları aynı yukarıdaki gibi soruyorlar kullanıcı girmek için onun kimlik bilgileri, sonra da gönder onları (veya bir access token oluşturulan her istek için web servisi.

Önemli olan bu örnek noktasına götürünDinlendirici web Hizmetleri her isteği ile kimlik doğrulaması gerektirir.

Bu senaryoda, ek bir güvenlik katmanı kullanıcı kimlik doğrulaması ek olarak istemci uygulama yetki eklemek istiyorum. Örneğin, eğer web istemcisi, iOS ve Android uygulamaları kullanarak web servis isteyebilirsiniz sunucuya bilmediğiniz üç müşterinin belirli bir isteği, ne olursa olsun olan kimliği doğrulanmış bir kullanıcı. Bu web servisi özel müşteriler için bazı fonksiyonları kısıtlamak için etkinleştirebilirsiniz. Bu API tuşları ve sırları kullanabilirsin, bazı fikirler için this answer bunu görmek için.

Facebook kimlik doğrulaması

İş akışı yukarıdaki Facebook üzerinden giriş üçüncü bir Taraf var çünkü Facebook bağlanmak için işe, kendisini Facebook değil. Giriş prosedürü kullanıcı kimlik bilgileri bizim kontrolümüz dışında girmiş olduğu Facebook web sitesine yönlendirilmesini gerektirir.

O yüzden ne kadar hızlı değiştiğini görelim:.

  • Kullanıcı https://example.com bağlanır
  • Sunucu ilk sayfa yapar, zengin bir Javascript uygulama hizmet vermektedir. Somehwere "Facebook Giriş" düğmesine basın. bir giriş içeren bir form var sayfada
  • Bu kullanıcı tıklama "Facebook ile Giriş" (örneğin) yönlendiren bir bağlantı düğmesi, https://example.com/auth/facebook.
  • https://example.com/auth/facebook yol passport.js (documentation) tarafından işlenir
  • Kullanıcı gördüğü her sayfasını değiştiren ve Facebook ve web uygulaması oturum açma yetkisi yere sayfa ağırladı. Bu bizim kontrolümüzün tamamen dışında.
  • Kullanıcı günlükleri için Facebook ve izin verir bizim uygulama, bu yüzden Facebook şimdi yönlendirir geri geri arama URL ediyoruz yapılandırılmış passport.js Kur, aşağıdaki örnekte documentation https://example.com/auth/facebook/callback
  • https://example.com/auth/facebook/callback yol için passport.js işleyici Facebook access token alır, geri arama fonksiyonu ve Facebook, kullanıcının e-posta adresi de dahil olmak üzere bazı kullanıcı bilgileri çağırır.
  • E-posta ile veritabanımızda kullanıcı bulun ve Facebook erişimi ile token saklayabilirsiniz.
  • Son şey senin içinde Facebook geri için geri yönlendir zengin istemci uygulama, ama bu sefer ihtiyacımız geçirmek için kullanıcı adı ve erişim belirteci için istemci bunu kullanabilir. Bu çeşitli şekillerde yapılabilir. Örneğin, Javascript değişkenleri sunucu tarafında bir şablon motoru ile sayfaya eklenebilir veya başka bir kurabiye bu bilgi ile iade edilebilir. (ben başlangıçta önerdiği gibi @URL bu veri geçen güvenlik sorunları belirttiğin için RyanKimber sayesinde).
  • Şimdi tek sayfa uygulaması bir kez daha, ancak istemci kullanıcı adı ve erişim belirteci vardır.
  • İstemci uygulama "" olay anında ve uygulama farklı bölümlerini web servisine ihtiyaç duydukları bilgi talep edelim. login tetikleyebilir
  • Tüm istekleri https://example.com/api gönderilen erişim kimlik doğrulaması için simge, veya uygulamanın kendi access token Facebook oluşturulan token ile ... ... Facebook yer alacak "get_access_token" REST API işlevi.
  • Tarayıcı dışı uygulamalar OAuth giriş için bir web tarayıcısı gerektirir, çünkü bu biraz daha zor burada. Giriş gelen bir telefon ya da masaüstü uygulaması ihtiyacınız olacak başlamak için bir tarayıcı yapmak için yönlendirmek için Facebook, ve daha da kötüsü, ihtiyacınız olan bir tarayıcı geçirmek için Facebook access token geri uygulama ile bazı mekanizması.

Bu sorulara cevaplar umarım. Tabii ki Twitter, Google, veya herhangi bir diğer OAuth tabanlı kimlik doğrulama hizmeti ile Facebook değiştirebilirsiniz.

Eğer birileri bu işi daha basit bir yolu varsa bilmek isterim.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Charles Nesson

    Charles Ness

    27 NİSAN 2006
  • Megan Parken

    Megan Parken

    19 Temmuz 2009
  • pissengehen

    pissengehen

    26 EYLÜL 2006