Kullanıcı kimlik doğrulaması için JWT belirteçleri (bir login
bitiş noktası tarafından yayınlanan ve daha sonra tüm üstbilgilere gönderilen) kullanan RESTful API oluşturuyorum ve belirteçler, sabit bir süre sonra yenilenmesi gerekiyor ( renew
yenilenen bir belirteç döndüren bir bitiş noktası çağrılıyor) ).
Bir kullanıcının API oturumunun jetonun süresi dolmadan geçersiz hale gelmesi olasıdır, bu nedenle tüm uç noktalarım aşağıdakileri kontrol ederek başlar: 1) jeton hala geçerli ve 2) kullanıcının oturumu hala geçerli. Jetonu doğrudan geçersiz kılmanın bir yolu yoktur, çünkü istemciler yerel olarak saklar.
Bu nedenle, tüm uç noktalarımın müşterilerime iki olası koşuldan bahsetmesi gerekir: 1) jetonu yenileme zamanı veya 2) oturumun geçersiz hale gelmesi ve artık sisteme erişmesine izin verilmiyor. İki koşuldan biri ortaya çıktığında uç noktalarımın müşterilerine sinyal vermesi için iki alternatif düşünebilirim (müşterilerin her iki seçeneğe de uyarlanabileceğini varsayın):
- Oturum geçersiz hale geldiyse bir http 401 kodu (yetkisiz) döndürün veya belirtecin süresi dolduğunda 412 kodu (önkoşul başarısız oldu) döndürün ve
renew
200 (ok) kod döndürecek bitiş noktasını çağırmanın zamanı geldi . - Oturumun geçersiz olduğunu veya belirtecin süresinin dolduğunu bildirmek için 401 değerini döndürün. Bu durumda, istemci hemen
renew
bitiş noktasını çağırır , eğer 200 döndürürse jeton yenilenir, ancakrenew
401 döndürürse, istemci sistemin dışında kaldığı anlamına gelir.
Yukarıdaki iki seçenekten hangisini önerirsiniz? Hangisi daha standart, anlaşılması daha basit ve / veya daha RESTful olur? Yoksa tamamen farklı bir yaklaşım önerir misiniz? Her iki seçenekte de belirgin sorunlar veya güvenlik riskleri görüyor musunuz? Cevabınız görüşünüzü destekleyen harici referanslar içeriyorsa ekstra puanlar.
GÜNCELLEME
Çocuklar, lütfen asıl soruya odaklanın - bir yenileme / oturum geçersiz kılma sinyalini vermek için iki http kodu alternatifinden hangisi en iyisidir? Sistemimin JWT ve sunucu tarafı oturumlarını kullandığı gerçeğine aldırmayın, bu benim çok özel iş kuralları için API'mın bir özelliği ve yardım aradığım kısım değil;)