Hedef: Bir kullanıcının çalıştırdığım korumalı bir web hizmetine erişim gerektiren bir iOS uygulamasında Facebook ile kimlik doğrulaması yapmasına izin verin.
Varsayımlar: Oturum açmak için Facebook'u kullanmamayı tercih eden kullanıcılar için yerel bir kimlik doğrulama (ve kayıt) sistemi mevcuttur.
Detaylar:
- Bir kullanıcının sistemimiz için ayrı bir hesap / kimlik bilgisi oluşturmadan Facebook ile oturum açma seçeneğini sunmak istediğimizi varsayalım.
- Kendi yerel kimlik doğrulama mekanizmamızı (kullanıcı adı ve şifre) desteklediğimiz için kendi kullanıcı kimliklerimiz var ve ilk kimlik doğrulamasından sonraki etkileşimler için kullanılan bir kimlik doğrulama kodu yayınlıyoruz.
Facebook'un geliştirici belgelerinde bunun için en iyi uygulamalara sahip olmaması beni şaşırttı. Mevcut tüm belgeler, bir web sitesine FB yetkisi oluşturduğunuzu veya kimlik doğrulaması gerektirmeyen hiçbir hizmeti olmayan bağımsız bir mobil uygulamayı varsayar.
İşte bunun nasıl tasarlanacağına dair ilk düşüncelerim, ancak doğru olup olmadığı konusunda doğrulama istiyorum.
- İstemci Facebook iOS Girişini açar
- Kullanıcı Arayüzü Kullanıcısı Facebook kimlik bilgileriyle oturum açar ve erişim belirteci alır
- iOS Uygulaması erişim kodunu sunucumuza aktarıyor
Sunucumuz (a) belirtecini doğrulamak ve (b) söz konusu erişim belirtecinin FB kullanıcı kimliğini almak için erişim belirtecini kullanarak FB grafik API'siyle konuşur.
Örneğin sunucumuz, JSON nesnesindeki profil bilgilerini döndürecek olan https://graph.facebook.com/me/?access_token=XYZ adresini arar
Geçerli olduğu varsayılarak, sunucumuz Kullanıcı Kimliğini JSON nesnesinden çıkarır ve kullanıcının zaten bir hesabı olup olmadığını kontrol eder. Eğer öyleyse, o oturum için kullanmak üzere müşteriye kendi yetki biletimizi düzenleriz. Kullanıcının bir hesabı yoksa, Facebook Kullanıcı Kimliği ile yeni bir hesap oluştururuz, kendi benzersiz Kullanıcı Kimliğimizi atarız ve kimlik doğrulama biletimizi düzenleriz.
- Müşteri daha sonra kimlik doğrulama gerektiren sonraki etkileşimlere kimlik doğrulama biletini geri gönderir.
Bu bana doğru bir yaklaşım gibi gözüküyor ama delice temel bir şeyi kaçırıp yanlış (karmaşık) yoldan gidip gitmediğimden emin değilim.