REST API'yi korumak için hala en iyi güvenlik çözümünü bulmaya çalışıyorum, çünkü mobil uygulamaların ve API'nin sayısı her geçen gün artıyor.
Farklı kimlik doğrulama yöntemleri denedim, ancak yine de bazı yanlış anlaşılmalar var, bu yüzden daha deneyimli birisinin tavsiyesine ihtiyacım var.
Tüm bunları nasıl anladığımı anlatayım. Bir şeyi yanlış anlarsam, lütfen bana bildirin.
REST API genel olarak WEB kadar genel olarak durumsuz olduğu sürece, her bir talepte bazı çerezler göndermemiz gerekir (çerezler, token ....). Kullanıcı kimliğini doğrulamak için yaygın olarak kullanılan üç mekanizmayı biliyorum
HTTPS ile belirteci. Bu yaklaşımı HTTPS ile yeterince iyi kullandım. Eğer kullanıcı doğru şifreyi ve giriş bilgisini verirse, cevap olarak token alacak ve daha sonraki istekler için onu kullanacaktır. Token, sunucu tarafından üretilir ve örneğin ayrı tabloda veya kullanıcı bilgilerinin saklandığı tabloda depolanır. Bu nedenle, her istek sunucusu için kullanıcının belirteç olup olmadığını ve veritabanındaki ile aynı olup olmadığını kontrol eder. Her şey oldukça basit.
JWT Token. Bu belirteç kendi kendini tanımlayıcı niteliktedir, belirteç kendisi hakkında gerekli tüm bilgileri içerir, kullanıcı örneğin son kullanma tarihini veya başka bir talebi değiştiremez, çünkü bu belirteç gizli anahtarla sunucu tarafından üretilir (imzalanır). Bu da açık. Ama şahsen benim için büyük bir sorun belirteci nasıl geçersiz kılacağımı.
OAuth 2. Doğrudan sunucu ile müşteri arasında iletişim kurulurken bu yaklaşımın neden kullanılması gerektiğini anlamıyorum. Anladığım kadarıyla OAuth sunucusu, diğer uygulamaların şifre ve giriş yapmadan kullanıcı bilgilerine erişmesine izin vermek için sınırlı kapsamlı bir simge yayınlamak için kullanılır. Bu, sosyal ağlar için mükemmel bir çözümdür, kullanıcı bir sayfaya kaydolmak istediğinde, sunucu, örneğin twitter veya facebook'tan kullanıcı bilgisi alma izni alabilir ve kayıt alanlarını kullanıcı verileri vb. İle doldurabilir.
Çevrimiçi mağaza için mobil istemciyi düşünün.
İlk soru ilk tip belirteci yerine JWT'yi mi tercih etmeliyim? Mobil istemcide oturum açma / kapatma kullanıcısına ihtiyacım olduğu sürece, bir yere veya JWT durumunda depolamam gerekiyor, belirtecin oturumu kapatması gerekiyor. Geçersiz bir liste (kara liste) oluşturmak için belirteci geçersiz kılmak için farklı yaklaşımlar kullanılır. Hmm. Tablo / dosya, belirtecin tabloda depolanıp kullanıcılarla ilişkilendirilip oturumu kapatmadan kaldırılmasından çok daha büyük bir boyuta sahip olacaktır.
Peki JWT belirtecinin faydaları nelerdir?
OAuth hakkındaki ikinci soru, sunucumla doğrudan iletişim halinde kullanmam gerekir mi? İstemci ve sunucu arasında yalnızca belirteç vermek için bir katman daha kullanılmasının amacı nedir, ancak iletişim oauth sunucusu ile değil, ana sunucu ile olacaktır. Anladığım kadarıyla OAuth sunucusu, yalnızca kullanıcıya özel bilgilere erişmek için üçüncü taraf uygulama izinleri (belirteçleri) vermekten sorumludur. Ancak mobil istemci başvurum üçüncü taraf değil.