2012-07-04 11 views
8

Dropbox ve LinkedIn gibi diğer servislerle entegre olan tek bir sayfa uygulamasına sahibim. Örneğin Dropbox'ın mükemmel bir API'si var ve Dropbox'ın kimlik doğrulama bağlantısını başka bir pencerede açarak kimlik doğrulamasını çalıştırıyorum. Kullanıcı kimliğini doğruladıktan sonra, uygulamanıza geri dönmek için bu yeni pencereyi kapatmasını istiyorum. benim app uzak kullanıcı alır, ve hatta daha hantal tabletlerde olduğu gibiYeni bir pencere açmadan tek bir sayfa uygulamasında Dropbox kimlik doğrulaması nasıl yapılır?

Açıkçası bu suboptimaldir.

Nasıl böyle bir lightbox veya kalıcı formda Uygulamanın içinde kimlik yapardınız? entegrasyon kendisi sunucu tarafı değil istemci tarafı olur

Not. Şu anda, Dropbox kimlik doğrulama sayfasında sunucumun, kimlik doğrulamanın başarılı olduğunu bildiren bir geri arama sayfası var; bu veritabanında, kullanıcının gelecekte kullanmak üzere veritabanında saklıyorum.

Not: kelle comment okumalısınız: Bir kod örneği son derece arzu edilir ancak gerekli değildir.

+0

Uygulamanızın nerede çalıştığını açıklayabilir misiniz? Bu, kullanıcının kendi tarayıcısında eriştiği bir web uygulaması mıdır, yerel bir uygulama mı/hangi platform, vb? – Greg

+0

Omurga ve arkadaşlar üzerine inşa edilmiş bir web uygulaması ve ayrıca PhoneGap kullanarak mobil cihazlarda indirilebilecek. Dropbox SDK'yı PhoneGap ile birlikte kullanabiliyorum, bu yüzden bu soru tarayıcıdaki web uygulamasına odaklanır. Hızlı açıklama için –

+0

teşekkürler! Cevabımı gönderdim, eğer yanlış anlaşılırsam bana bildirin – Greg

cevap

11

Önerdiğiniz şey güvenlik modelini yenmek, bu yüzden mümkün olmamalıdır. Kullanıcı, doğrulama için gerçek sayfanın URL'sini görebilmelidir. Paypal ile ödeme yaptığınızı düşünürseniz, büyük olasılıkla önemli verilerinizi girmeden önce paypal.com'da olduğunuzu kontrol edersiniz? Aynı şey diğer tüm uygulamalar için de geçerlidir. Bu çok çirkin bir akış, ama endüstri bugünle en iyisi.

İdeal akış, kullanıcıyı üçüncü taraf web sitesine veya uygulamaya yönlendirir, kullanıcı girişlerini girer ve yetkilendirir, sonra size yeniden yönlendirir. Yerel bir uygulama başka bir yerel uygulamaya geçme avantajına sahiptir, bu nedenle akış biraz daha az çirkin olur.

İstediğiniz şeyi yapmak, 3. taraf hizmetine kullanıcının adını ve şifresini soran bir uygulama, ardından sahnenin arkasındaki auth dansını yapmak. Bu, kullanıcıları uygulamanızdan büyük olasılıkla engeller ve çok tehlikelidir. Tavsiye etmiyorum.

+1

Hızlı bir test yaptım ve Dropbox, yanıt üstbilgisinde [X-Frame-Options] (https://developer.mozilla.org/en-US/docs/The_X-FRAME-OPTIONS_response_header) göndererek iframe yaklaşımını gönderiyor. Bu durumda Andreas tarafından kullanılamaz. ChildBrowser'ın telefon uygulaması durumunda işe yarayıp yaramayacağından emin değilsiniz, ancak genel webapps için cevap doğrudur. Teşekkürler Alex. –

0

Uygulamanız bir web uygulamasıysa, akışı akışlandırmanın en iyi yolu, geçerli sayfayı (ör. How to redirect to another webpage in JavaScript/jQuery?) Dropbox'taki/izin sayfasına yönlendirmek, uygulamanızın bir sayfasındaki oauth_callback öğesinin belirtilmesidir. süreç tamamlandı.

Bu şekilde akış adildir:

(uygulamanızda)
  1. kullanıcı OAuth akmaya başlaması düğmesini tıkladığında
  2. kullanıcı uygulamasını mı
  3. (Dropbox yönlendirmeleri yetkisi (Uygulama sayfanızı yetkilendirmek Dropbox yönlendirir) oauth_callback başına uygulamanıza) uygulaması erişim belirteci alır ve entegrasyonu barındırmaktadır

kullanıma hazırdır ve bu tüm ekstra pencereleri açarak/kapama olmadan, tek bir sayfa içinde gerçekleşir.

+0

Cevabınız için teşekkürler. Önerilen çözümünüz her şeyi tek bir pencerede tutmak için harika, ancak gerçekten "tek sayfa" değil. Tek sayfalık uygulamalar, yenileme gerektirmeyen deneyim sağlamak için arka planda çok fazla veri, JS ve HTML yükler; diğer bir deyişle, bağlantılar tıklandığında tam sayfa yüklemesi tetiklenmez, yalnızca ilgili bölümlerin sayfa içi değişiklikleri tetiklenir. Yaklaşımınızla, tek uygulama web uygulamasına sahip olmanın avantajını yenerek, geri arama yoluyla uygulamaya döndüğünde tüm uygulama verilerinin yeniden yüklenmesi gerekir. –

3

Web sayfanızda bir iframe içinde yetkilendirme bitiş noktasını yükleyebilirsiniz. Ancak, bazı tarayıcıların iFrame içinde giriş sağlayıcısına gönderilen çerezlerde sınırlamaları olduğuna dikkat edin. Genellikle (Safari, iOS) çerezlere erişimi okudunuz, eğer oturum çerezi zaten sağlayıcıda ayarlanmışsa yeterlidir. Geri arama sayfasında

- kimlik doğrulama sonra dropbox'a geri gönderilir; Üst sayfada bir olayı tetiklemek için javascript işlevini çağırmanız gerekecek, bu kimlik doğrulaması yapılmalıdır.

window.parent.AppController.authenticationComplete(); 

üst sonra iç çerçeve kaldırmak ve kimlik doğrulaması olarak devam edebilir. Çünkü potansiyel çerez sorununun


authenticationCompleted = function() { 
    // [snipp] 
    $("iframe#loginwrapper").remove(); 
} 

, ana HTML sayfası hiç sunulmaktadır önce, sunucu ucundan başlatılan tüm kimlik doğrulama adımları gerçekleştirmek için tavsiye vardı. Ardından, uygulamanızın iki kez yüklenmediğinden emin olursunuz. Bu, birçok kimlik doğrulama/kimlik ara katman yazılımı çözümlerinin tipik davranışıdır.


Eğer app söz Ne zaman bir saf WebApp demek olup olmadığı açık değildir, ya da böyle PhoneGap olarak çerçeveler kullanarak bir melez uygulamada mevcut kontrol edebiliyor. Phonegap veya benzeri ile, tarayıcının içinde tarayıcı içinde bir tarayıcı yükleyebilirsiniz - bu durumda ChildBrowser aynı çerez sınırlamaları ile sınırlı değildir.

Yakın zamanda iOS için Phonegap ve Childbrowser ile bu çalışmanın nasıl yapılacağı konusunda bir eğitim yazdım. Bu öğretici OAuth'un 1.0 farklıdır OAuth 2.0 kullanarak açık olduğunu

dikkat edin.

+0

Sunucu tarafı kimlik doğrulaması kullanıyorum ve belirteçler dropbox'a ve get parametresiyle geri çağrıma geri döndüğünden, çerez sınırlamalarının bir sorun olmayacağından şüpheleniyorum. Uygulamamı hem webapp hem de telefon appap'ına eklenen yerel bir uygulama olarak kullanıma sunacağım, böylece öğretici kullanışlı olabilir. Iframe yaklaşımı telefongapında da çalışır mı? çerezler bir sorun değilse, bir ChildBrowser yerine phonegap iframe kullanmak için herhangi bir yarar? Cevabınız için çok teşekkürler! –

+0

Evet, webapp'ta çalışan her şey, telefon konuşmasında da çalışıyor. –

+0

Uygulamanızın uygulamasına bakılmaksızın, kullanıcının Dropbox kimlik doğrulama giriş sayfasıyla etkileşime geçtiğinde tanımlama bilgisi sınırlamaları ile ilgili sorunlarla karşılaşabilirsiniz; bu, bir hatayla sonuçlanabilecek tanımlama bilgilerini ayarlama ile sınırlı olabilir. –

İlgili konular