Bunu sled.com ile yaşadım. Burada hesap oluşturma ve giriş için birden fazla üçüncü taraf hesabını destekleme konusunda birçok sorun var. Onlardan bazıları:
- Hem yerel şifreyi hem de üçüncü taraf girişlerini desteklemeniz mi gerekiyor?
Sled.com için, eklediği küçük değer ve bir şifre giriş formunun güvenliğini sağlamanın ek maliyeti nedeniyle yerel şifreyi bırakmaya karar verdim. Şifreleri kırmak için bilinen birçok saldırı vardır ve şifreleri tanıtacaksanız, bunların kırılmasının kolay olmadığından emin olmalısınız. Ayrıca, sızıntılarını önlemek için bunları tek yönlü bir karma veya benzeri bir yerde saklamanız gerekir.
- Birden çok üçüncü taraf hesabını desteklemede ne kadar esnekliğe izin vermek istiyorsunuz?
Görünüşe göre üç giriş sağlayıcıyı zaten seçmişsiniz: Facebook, Twitter ve LinkedIn. Bu harika çünkü OAuth kullanıyor ve iyi tanımlanmış bir dizi güvenilir sağlayıcıyla çalışıyorsunuz. Ben OpenID hayranı değilim. Geriye kalan soru, aynı sağlayıcıdan birden fazla üçüncü taraf hesabını desteklemeniz gerekip gerekmediğidir (örneğin, iki Twitter hesabının bağlı olduğu bir yerel hesap). Hayır kabul ediyorum, ancak bunu yaparsanız, bunu veri modelinize yerleştirmeniz gerekir.
Sled için Facebook, Twitter ve Yahoo! ve her kullanıcı hesabı içinde her biri için bir anahtar depolayın: {"_id": "djdjd99dj", "yahoo": "dj39djdj", twitter: "3723828732", "facebook": "12837287"}. Her bir üçüncü taraf hesabının yalnızca tek bir yerel hesaba bağlanabilmesini sağlamak için bir grup kısıtlama koyarız.
Aynı üçüncü taraf sağlayıcıdan birden fazla hesaba izin verecekseniz, benzersizliği sağlamak için listeleri ve bununla birlikte tüm diğer kısıtlamaları desteklemek için listeler veya başka yapılar kullanmanız gerekir.
- Birden çok hesap nasıl bağlanır?
Kullanıcı hizmetinize ilk kez kaydolduğunda, önce üçüncü taraf sağlayıcıya gider ve doğrulanmış bir üçüncü taraf kimliğiyle geri gelir. Daha sonra onlar için yerel bir hesap oluşturursunuz ve istediğiniz diğer bilgileri toplarsınız. E-posta adreslerini topluyoruz ve ayrıca yerel bir kullanıcı adı seçmelerini istiyoruz (formu diğer sağlayıcıdan mevcut kullanıcı adlarıyla önceden doldurmaya çalışıyoruz). Daha sonra hesap kurtarma için bir tür yerel tanımlayıcıya (e-posta, kullanıcı adı) sahip olmak çok önemlidir.
Tarayıcı, mevcut bir hesap için bir oturum çerezi (geçerli veya süresi dolmuş) yoksa ve kullanılan üçüncü taraf hesabının bulunamadığında, sunucu ilk kez oturum açtığını bilir. Kullanıcıya sadece giriş yapmadıklarını, ancak yeni bir hesap oluşturduklarını bildirmeye çalışırız, böylece zaten bir hesapları varsa, umarım mevcut hesaplarıyla duraklar ve giriş yaparlar.
Ek hesapları bağlamak için tam olarak aynı akışı kullanırız, ancak kullanıcı üçüncü taraftan geri döndüğünde, yeni bir hesabı bir giriş işlemine bağlama girişimi arasında ayrım yapmak için geçerli bir oturum çerezi varlığı kullanılır. Her türden yalnızca bir üçüncü taraf hesabına izin veriyoruz ve zaten bir tane bağlıysa, işlemi engelleyin. Sorun değil, çünkü zaten bir tane (sağlayıcı başına) varsa, yeni bir hesabı bağlamak için arayüz devre dışı bırakılır, ancak her ihtimale karşı.
- Hesaplar nasıl birleştirilir?
Bir kullanıcı zaten yerel bir hesaba bağlı olan yeni bir üçüncü taraf hesabını bağlamaya çalıştıysa, iki hesabı birleştirmek istediklerini onaylamasını istersiniz (veri kümenizle böyle bir birleştirmeyi yapabileceğinizi varsayarsak - genellikle daha kolay daha iyi). Ayrıca, birleştirme istemek için özel bir düğme de sağlayabilirsiniz, ancak pratikte yaptıkları tek şey başka bir hesabı bağlamaktır.
Bu oldukça basit bir durum makinesidir. Kullanıcı üçüncü taraftan üçüncü taraf hesap kimliğiyle geri döner. Veritabanınız üç durumdan birinde olabilir:
- Hesap yerel bir hesaba bağlı ve oturum çerezi mevcut değil -> Giriş
- Hesap yerel bir hesaba bağlı ve bir oturum çerezi var -> Birleştir
- Hesap yerel bir hesaba bağlı değil ve oturum çerezi mevcut değil -> Kaydol
Hesap yerel bir hesaba bağlı değil ve bir oturum çerezi var -> Ek hesap bağlama
- Üçüncü taraf sağlayıcılarla hesap kurtarma nasıl yapılır?
Bu hala deneysel bölge. Çoğu hizmet hem üçüncü taraf hesaplarının yanında yerel bir parola sağladığından hem de "parolamı unuttum" kullanım durumuna odaklandığından, yanlış gidebilecek her şeye odaklanmadığından bunun için mükemmel bir UX görmedim.
Sled ile "Oturum açmak için yardıma mı ihtiyacınız var?" ve tıkladığınızda kullanıcıdan e-posta veya kullanıcı adını isteyin. Bakıyoruz ve eşleşen bir hesap bulursak, kullanıcıya otomatik olarak hizmette oturum açabilecek bir bağlantıyı e-postayla gönderin (bir kez iyi). Bir kez girdikten sonra, bunları doğrudan hesap bağlama sayfasına götürüyoruz, onlara bir göz atmaları ve potansiyel olarak ek hesapları bağlamaları gerektiğini söyledik ve onlara zaten bağladıkları üçüncü taraf hesaplarını gösterdik.