Birkaç senaryo, erişim ve yenileme simgelerinin amacını ve bir oauth2 (veya başka bir kimlik doğrulaması) sistemi tasarlamadaki mühendislik değişimlerini göstermeye yardımcı olabilir:
Web uygulaması senaryosu
Web uygulaması senaryosunda birkaç seçeneğiniz vardır:
- kendi oturum yönetiminiz varsa, access_token ve refresh_token öğelerini oturum durumu hizmetinizde oturum durumunda oturum kimliğinizde saklayın. Kaynağa erişmenizi gerektiren kullanıcı tarafından bir sayfa istendiğinde access_token öğesini kullanın ve access_token süresinin dolması durumunda yenisini almak için refresh_token öğesini kullanın.
Birisinin oturumunuzu ele geçirmeyi başardığını düşünelim. Mümkün olan tek şey sayfalarınızı istemektir.
- oturum yönetiminiz yoksa, access_token öğesini bir çereze koyun ve bunu oturum olarak kullanın. Ardından, kullanıcı web sunucunuzdan sayfa istediğinde access_token'ı gönderir. Gerekirse uygulama sunucunuz access_token'i yenileyebilir.
1 ve 2 karşılaştırması:
1'de access_token ve refresh_token yalnızca yetkilendirme sunucusu (sizin durumunuzda google) ve uygulama sunucunuz arasındaki kablo üzerinden seyahat eder. Bu güvenli bir kanalda yapılabilir. Bir bilgisayar korsanı oturumu ele geçirebilir, ancak yalnızca web uygulamanızla etkileşime girebilir. 2'de, bilgisayar korsanı access_token'i alıp kullanıcının erişim izni verdiği kaynaklara ilişkin kendi isteklerini oluşturabilir. Bilgisayar korsanı access_token'i ele geçirse bile, kaynaklara erişebilecekleri kısa bir pencereye sahip olacaklar.
Her iki durumda da refresh_token ve clientid / secret sunucu tarafından bilinir ve web tarayıcısından uzun süreli erişim elde etmeyi imkansız hale getirir.
Oauth2 uyguladığınızı ve erişim belirtecinde uzun bir zaman aşımı ayarladığınızı düşünelim:
1) Uygulama sunucusunda gizli olduğu için kısa ve uzun erişim jetonu arasında çok fazla fark yoktur. 2) Birisi tarayıcıda access_token'ı alabilir ve daha sonra kullanıcının kaynaklarına uzun süre doğrudan erişmek için kullanabilir.
Mobil senaryo
Cep telefonunda bildiğim birkaç senaryo var:
İstemci kimliği / sırrını cihazda saklayın ve cihazın, kullanıcının kaynaklarına erişim elde etmesini sağlayın.
İstemci kimliği / sırrını tutmak ve düzenlemeyi yapmasını sağlamak için bir arka uç uygulama sunucusu kullanın. Access_token'ı bir tür oturum anahtarı olarak kullanın ve bunu istemci ile uygulama sunucusu arasında geçirin.
1 ve 2 karşılaştırması
1) Cihazda müşteri kimliği / sır sahibi olduktan sonra artık gizli değillerdir. Herkes koda olabilir ve elbette kullanıcının izniyle sanki senmişsin gibi davranmaya başlayabilir. Access_token ve refresh_token de bellektir ve güvenliği ihlal edilmiş bir cihazdan erişilebilir, bu da kullanıcı kimlik bilgilerini vermeden birisinin uygulamanız olarak hareket edebileceği anlamına gelir. Bu senaryoda, refresh_token access_token ile aynı yerde olduğundan access_token uzunluğunun hack'lerde bir fark yaratmaz. 2) müşteri kimliği / sırrı veya yenileme jetonu tehlikeye atılır. Burada access_token süresinin dolması, bir bilgisayar korsanının kullanıcı kaynaklarına erişebilmesi için ne kadar süre erişebileceğini belirler.
Vade uzunlukları
Burada erişim_konusu sona erme sürenizin ne kadar olması gerektiğine dair kimlik doğrulama sisteminizle ne güvenceye aldığınıza bağlıdır. Kullanıcı için özellikle değerli bir şey varsa, kısa olmalıdır. Daha az değerli bir şey, daha uzun olabilir.
Google gibi bazı kişilerin refresh_token süreleri dolmaz. Bazıları yığın akışı gibi. Süre bitimine ilişkin karar, kullanıcı kolaylığı ve güvenlik arasındaki bir ödünleşmedir. Yenileme belirtecinin uzunluğu, kullanıcının dönüş uzunluğuyla ilişkilidir; yani, yenilemeyi kullanıcının uygulamanıza ne sıklıkta geri döndüğüne ayarlayın. Yenileme belirtecinin süresinin sona ermesinin tek yolu iptal edilmezse, açıkça iptal edilir. Normalde bir oturum açma işlemi iptal edilmez.
Umarım oldukça uzun yazı yararlıdır.