JWT (JSON Web Token) sona erme süresinin otomatik uzatılması


509

Yeni REST API'mıza JWT tabanlı kimlik doğrulaması uygulamak istiyorum. Ancak son kullanma süresi belirteçte ayarlandığından, otomatik olarak uzatmak mümkün mü? Kullanıcıların uygulamayı o dönemde etkin bir şekilde kullanıyorlarsa her X dakikada bir oturum açmasını istemiyorum. Bu büyük bir UX başarısızlığı olurdu.

Ancak sona erme süresini uzatmak yeni bir jeton oluşturur (ve eskisi sona erene kadar hala geçerlidir). Ve her istekten sonra yeni bir jeton oluşturmak bana aptalca geliyor. Aynı anda birden fazla jeton geçerli olduğunda güvenlik sorunu gibi görünür. Tabii ki eski kullanılmış olanı bir kara liste kullanarak geçersiz kılabilirim ama simgeleri saklamam gerekirdi. Ve JWT'nin avantajlarından biri de depolama değildir.

Auth0'ın bunu nasıl çözdüğünü buldum. Sadece JWT jetonunu değil, aynı zamanda bir yenileme jetonunu da kullanırlar: https://docs.auth0.com/refresh-token

Ama yine de, bunu uygulamak için (Auth0 olmadan) yenileme jetonlarını saklamam ve sürelerini muhafaza etmem gerekir. O zaman gerçek fayda nedir? Neden yalnızca bir jeton (JWT değil) ve son kullanma tarihini sunucuda tutmuyorsunuz?

Başka seçenekler var mı? JWT kullanımı bu senaryo için uygun değil mi?


1
Aslında bir kerede birçok geçerli jetonla ilgili bir güvenlik sorunu yoktur ... Aslında sonsuz sayıda geçerli jeton vardır ... Öyleyse, neden bir yenileme jetonuna sahip olmalısınız? Her istekden sonra onları yeniden oluşturacağım, aslında bir sorun olmamalı.
maryo

1
SPA için, blog gönderime göz
atın

2
@maryo Orada herhangi bir zamanda (potansiyel olarak) yüzlerce veya binlerce kullanılmamış geçerli JWT'ye sahip olmanın saldırı ayak izinizi artırdığını ve bir güvenlik riski olduğunu düşünüyorum. Zihnimde, JWT'ler kalenin anahtarlarıyla bir şekilde erişim jetonları olduğu için dikkatlice verilmelidir.
java-addict301

Yanıtlar:


590

Auth0'da çalışıyorum ve yenileme belirteci özelliğinin tasarımında yer aldım.

Her şey uygulama türüne bağlıdır ve burada önerilen yaklaşımımız.

Web uygulamaları

İyi bir desen, simgenin süresi dolmadan yenilemektir.

Simgenin sona erme tarihini bir hafta olarak ayarlayın ve kullanıcı web uygulamasını her açışında ve her saatte bir simgeyi yenileyin. Bir kullanıcı uygulamayı bir haftadan daha uzun bir süre boyunca açmazsa, tekrar giriş yapmak zorunda kalacak ve bu kabul edilebilir bir web uygulaması UX.

Jetonu yenilemek için API'nızın geçerli, süresi dolmamış bir JWT alan ve yeni sona erme alanı ile aynı imzalı JWT'yi döndüren yeni bir uç noktaya ihtiyacı vardır. Ardından web uygulaması belirteci bir yerde saklar.

Mobil / Yerel uygulamalar

Çoğu yerel uygulama bir kez ve sadece bir kez oturum açar.

Fikir, yenileme kodunun hiçbir zaman sona ermemesi ve her zaman geçerli bir JWT ile değiştirilebilmesidir.

Asla sona ermeyen bir belirteçle ilgili sorun, asla asla anlamına gelmez. Telefonunuzu kaybederseniz ne yaparsınız? Bu nedenle, kullanıcı tarafından bir şekilde tanımlanabilir olması gerekir ve uygulamanın erişimi iptal etmek için bir yol sağlaması gerekir. Cihazın adını kullanmaya karar verdik, örneğin "maryo'nun iPad'i". Daha sonra kullanıcı uygulamaya gidebilir ve "maryo'nun iPad" ine erişimi iptal edebilir.

Başka bir yaklaşım, belirli olaylarda yenileme jetonunu iptal etmektir. İlginç bir olay parolayı değiştiriyor.

JWT'nin bu kullanım durumları için yararlı olmadığına inanıyoruz, bu yüzden rastgele oluşturulmuş bir dize kullanıyoruz ve onu yanımızda saklıyoruz.


42
Web uygulamaları önerilen yaklaşımı için, jeton bir hafta boyunca geçerliyse, jetonu ele geçiren ve daha sonra bu kadar uzun süre kullanabilen biriyle ilgilenmiyor muyuz? Feragatname: Neden bahsettiğimi tam olarak bilmiyorum.
user12121234

30
@wbeange yes interception, çerezlerde bile bir sorundur. Https kullanmalısınız.
José F. Romaniello

15
@ JoséF.Romaniello Web uygulaması örneğinizde, jetonu saklamak dışında her şey benim için anlamlı. JWT'nin güzelliğinin vatansız kimlik doğrulaması olduğunu düşündüm - yani web uygulamasının imzalandığı gibi jetonu saklaması gerekmez. Sunucunun sadece jetonun geçerliliğini kontrol edebileceğini, son kullanma süresi içinde olduğundan emin olabileceğini ve daha sonra yenilenmiş bir JWT jetonu yayınlayabileceğini düşünürdüm. Bu konuyu biraz açıklayabilir misiniz? Belki henüz JWT'leri yeterince anlamıyorum.
Lo-Tan

7
İki soru / endişe: 1- Web Uygulaması örneği: süresi geçmiş jetonun yenilemesine neden izin verilmiyor? Diyelim ki kısa süre sonu ayarladık (1 saat) ve belirttiğiniz gibi bir simgenin süresi dolduğunda arka uç sunucusuna yenileme aramaları yapın. 2- Karma (rasgele tuzlu) parolayı belirteçte saklamakla ilgili bir güvenlik sorunu var mı? Fikir, oradaysa, arka uç sunucusunun yenileme istendiğinde DB'de saklanan parolayı kontrol edebilmesi ve parolaların eşleşmemesi durumunda isteği reddetmesidir. Bu, Mobil / Yerel uygulama şifre değişikliğini kapsayacak ve çözümün Mobil kullanım durumuna genişletilmesine olanak tanıyacaktır.
psamaan

7
-1 Doğrulama süresini uzatmak için herhangi bir jetonu körü körüne yeniden imzalayan herkese açık bir API'yı sergilemek kötüdür. Artık tüm jetonlarınızın etkili bir sonsuz süresi var. Bir token imzalama eylemi, imzalama sırasında o tokenda yapılan her bir hak talebi için uygun kimlik doğrulama kontrollerini içermelidir.
Phil

69

Yetkilendirmeyi kendiniz ele aldığınızda (yani Yetkilendirme0 gibi bir sağlayıcı kullanmayın) aşağıdakiler işe yarayabilir:

  1. Diyelim ki 15 dk.
  2. Uygulama, jeton gerektiren herhangi bir işlemden önce jeton son kullanma tarihini kontrol eder (jeton son kullanma tarihini içerir). Simgenin süresi dolmuşsa, ilk olarak API'dan jetonu 'yenilemesini' ister (bu UX'e şeffaf bir şekilde yapılır).
  3. API jeton yenileme isteği alır, ancak önce kullanıcı veritabanına o kullanıcı profiline karşı 'reauth' bayrağının ayarlanıp ayarlanmadığını (jeton kullanıcı kimliği içerebilir) kontrol eder. Bayrak varsa, jeton yenilemesi reddedilir, aksi takdirde yeni bir jeton verilir.
  4. Tekrar et.

Örneğin kullanıcı parolasını sıfırladığında, veritabanı arka ucundaki 'reauth' bayrağı ayarlanır. Kullanıcı bir daha oturum açtığında bayrak kaldırılır.

Ayrıca, bir kullanıcının en az 72 saatte bir giriş yapması gereken bir politikanız olduğunu varsayalım. Bu durumda, API jeton yenileme mantığınız da kullanıcının veritabanından son giriş tarihini kontrol eder ve bu temelde jeton yenilemesini reddeder / izin verir.


7
Bunun güvenli olacağını sanmıyorum. Eğer bir saldırgan olsaydım ve jetonunuzu çaldıysanız ve sunucuya gönderdiysem, sunucu kontrol edip bayrağın doğru olarak ayarlandığını görecek ve bu da yenilemeyi engelleyecek kadar harika. Sorun kurbanın parolasını değiştirmesi durumunda bayrağın yanlış olarak ayarlanması ve şimdi saldırganın yenilemek için bu orijinal jetonu kullanmasıdır.
user2924127

6
@ user2924127 hiçbir kimlik doğrulama çözümü mükemmel değildir ve her zaman ödünleşmeler olacaktır. Saldırgan 'jetonunuzu çalma' konumundaysa, endişelenmeniz gereken daha büyük sorunlarınız olabilir. Maksimum jeton ömrü ayarlamak, yukarıdakilere faydalı bir değişiklik olacaktır.
IanB

27
veritabanında başka bir alan olan reauth bayrağına sahip olmak yerine jetona karma (bcrypt_password_hash) ekleyebilirsiniz. Ardından jetonu yenilerken, karma (bcrypt_password_hash) kodunun bir değere eşit olup olmadığını onaylamanız yeterlidir. Belirteç yenilemeyi reddetmek için parola karmasını güncellemeniz gerekir.
bas

4
@bas, optimizasyonlar ve performans düşünerek, şifre karma doğrulamanın gereksiz olacağını ve daha fazla sunucu etkisi olacağını düşünüyorum. İmza firmasının / doğrulamasının daha uzun sürmesi için belirtecin boyutunu artırın. şifre için ek karma hesaplamalar. ekstra alan yaklaşımı ile basit bir boole ile yeniden hesaplamada doğrularsınız. Db güncellemeleri fazladan alan için daha az, ancak daha sık belirteç yenilemeleri. Ve isteğe bağlı olarak mevcut oturumlar (mobil, web vb.) İçin tek tek oturum açma zorlama hizmeti alırsınız.
le0diaz

6
Bence user2924127 tarafından yapılan ilk yorum aslında yanlış. Parola değiştirildiğinde, hesap yeniden kimlik doğrulaması gerektiriyor olarak işaretlenir, bu nedenle mevcut tüm süresi dolmuş jetonlar geçersiz olur.
Ralph

15

Uygulamalarımızı arka uçta RESTful apis ile HTML5'e taşırken dolaşıyordum. Geldiğim çözüm şuydu:

  1. Müşteriye, başarılı bir şekilde oturum açtıktan sonra oturum süresi 30 dakika olan (veya her zamanki sunucu tarafı oturum süresi ne olursa olsun) bir jeton verilir.
  2. İstemci tarafındaki zamanlayıcı, süresinin dolmasından önce belirteci yenilemek üzere bir hizmeti çağırmak için oluşturulur. Yeni jeton, gelecekteki aramalarda mevcut olanın yerini alacaktır.

Gördüğünüz gibi, bu sık sık yenileme belirteci isteklerini azaltır. Kullanıcı, yenileme belirteci çağrısı tetiklenmeden önce tarayıcıyı / uygulamayı kapatırsa, önceki belirtecin süresi dolar ve kullanıcının yeniden oturum açması gerekir.

Kullanıcı hareketsizliğini karşılamak için daha karmaşık bir strateji uygulanabilir (örneğin, açık bir tarayıcı sekmesini ihmal ettiniz). Bu durumda, yenileme belirteci çağrısı, tanımlanan oturum süresini aşmaması gereken beklenen sona erme süresini içermelidir. Uygulamanın buna göre son kullanıcı etkileşimini takip etmesi gerekecektir.

Uzun süre sonu belirleme fikrini sevmiyorum, bu nedenle bu yaklaşım, daha az sıklıkta kimlik doğrulaması gerektiren yerel uygulamalarla iyi çalışmayabilir.


1
Bilgisayar askıya alınırsa / uyku durumunda kalırsa. Zamanlayıcı sona erene kadar hala sayılır, ancak jetonun süresi zaten dolmuştur. Zamanlayıcı bu durumlarda çalışmaz
Alex Parij

@AlexParij Sabit bir zamana benzer bir şeyle karşılaşacaksınız: stackoverflow.com/a/35182296/1038456
Aparajita

2
Müşterinin tercih edilen bir son kullanma tarihi olan yeni bir simge istemesine izin vermek benim için bir güvenlik riski gibi kokuyor.
java-addict301

14

Arka uçta ek güvenli depolama olmadan JWT'leri geçersiz kılmak için alternatif bir çözüm jwt_version, kullanıcılar tablosuna yeni bir tamsayı sütunu uygulamaktır . Kullanıcı oturumu kapatmak veya mevcut belirteçlerin süresinin dolmasını istiyorsa, jwt_versionalanı arttırır.

Yeni bir JWT oluştururken, jwt_versionJWT yüküne kodlayın , isteğe bağlı olarak yeni JWT'nin tüm diğerlerinin yerini alması gerekiyorsa değeri önceden artırın.

JWT doğrulanırken jwt_versionalan ile karşılaştırılır user_idve yetkilendirme yalnızca eşleşirse verilir.


1
Bunun birden fazla cihazla ilgili sorunları var. Temelde bir cihazda oturumunuzu kapatırsanız, her yerde oturumunuzu kapatır. Sağ?
Sam Washburn

4
Hey, gereksinimlerinize bağlı olarak bu bir "sorun" olmayabilir, ama haklısınız; bu, cihaz başına oturum yönetimini desteklemez.
Ollie Bennett

Bu, jwt_version'un sunucu tarafında depolanması gerektiği anlamına gelmez, böylece kimlik doğrulama şeması "oturum benzeri" olur ve JWT'lerin temel amacını yener?
ChetPrickles

8

Güzel bir soru- ve sorunun kendisinde zengin bilgi var.

Makale Yenile Kredi: Ne zaman bunların kullanımı ve JWTS ile nasıl etkileşime Bu senaryo için iyi bir fikir verir. Bazı noktalar: -

  • Yenileme belirteçleri, yeni bir erişim belirteci almak için gerekli bilgileri taşır.
  • Yenileme simgelerinin süresi de dolar ancak oldukça uzun ömürlüdür.
  • Yenileme simgeleri sızdırmadığından emin olmak için genellikle katı depolama gereksinimlerine tabidir.
  • Yetkilendirme sunucusu tarafından da kara listeye alınabilirler.

Ayrıca auth0 / angular-jwt angularjs'e de göz atın

Web API için. ASP .NET Web API 2 ve Owin kullanarak AngularJS Uygulamasında OAuth Yenileme İşaretlerini Etkinleştir'i okuyun


Belki yanlış okudum ... Ama "Jetonları Yenile ..." ile başlayan bir başlık içeren makale, burada bahsettikleriniz dışında yenileme jetonları hakkında hiçbir şey içermiyor.
Ievgen Martynov

8

Aslında bunu PHP'de API için bir istemci kütüphanesi yapmak için Guzzle istemcisini kullanarak uyguladım, ancak konsept diğer platformlar için çalışmalıdır.

Temel olarak, iki jeton yayınlıyorum, kısa (5 dakika) bir ve uzun bir hafta sonra sona erecek. İstemci kitaplığı, bazı isteklere 401 yanıtı alırsa kısa belirtecin bir yenilemesini denemek için ara katman yazılımı kullanır. Daha sonra orijinal isteği tekrar deneyecek ve eğer yenileyebiliyorsa, kullanıcıya şeffaf bir şekilde doğru yanıtı alacaktır. Başarısız olursa, sadece 401'i kullanıcıya gönderir.

Kısa jetonun süresi dolmuş ancak yine de orijinalse ve uzun jeton geçerli ve orijinalse, uzun jetonun kimlik doğrulaması yaptığı hizmette özel bir uç nokta kullanarak kısa jetonu yenileyecektir (bu, kullanılabileceği tek şeydir). Daha sonra yeni bir uzun jeton almak için kısa jetonu kullanacak, böylece kısa jetonu her yenilediğinde bir hafta daha uzatacaktır.

Bu yaklaşım ayrıca, bir kara liste listesini saklamak zorunda kalmadan kullanımımız için kabul edilebilir olan en fazla 5 dakika içinde erişimi iptal etmemizi sağlar.

Geç düzenleme: Kafamda taze olduktan sonra bu ayları yeniden okumak, daha kısa çağrıları yenilerken erişimi iptal edebileceğinizi belirtmeliyim, çünkü daha pahalı çağrılar için bir fırsat verir (örneğin, kullanıcının yasaklandı) hizmetinize yapılan her çağrıda ücret ödemeden.


8

Aşağıda, JWT erişim simgenizi iptal etme adımları verilmiştir:

1) Giriş yaptığınızda, istemciye yanıt olarak 2 jeton (Erişim belirteci, Yenileme belirteci) gönderin.
2) Erişim belirteci daha az sona erme süresine sahip olacak ve Yenileme uzun süre sona erecektir.
3) Müşteri (Ön uç) yenileme kodunu yerel deposunda ve erişim kodunu çerezlerde saklar.
4) Müşteri, apis çağırmak için erişim belirtecini kullanacaktır. Ancak süresi dolduğunda, yerel depolama alanından yenileme jetonunu seçin ve yeni jetonu almak için auth server api'yi arayın.
5) Kimlik doğrulama sunucunuzda, yenileme belirtecini kabul edecek ve geçerliliğini kontrol edecek ve yeni bir erişim belirteci döndürecek bir API görünür.
6) Yenileme belirtecinin süresi dolduğunda, Kullanıcı oturumu kapatır.

Daha fazla ayrıntıya ihtiyacınız varsa lütfen bana bildirin, kodu (Java + Spring boot) da paylaşabilirim.


GitHub'da varsa proje bağlantınızı paylaşabilir misiniz?
Arun Kumar N


6

JWT-autorefresh

Düğüm (React / Redux / Universal JS) kullanıyorsanız yükleyebilirsiniz npm i -S jwt-autorefresh.

Bu kütüphane, JWT belirteçlerinin yenilenmesini, erişim belirtecinin süresinin dolmasından önce (belirteçte kodlanan exp talebine dayalı olarak) kullanıcı tarafından hesaplanan saniye sayısına göre zamanlar. Kapsamlı bir test paketine sahiptir ve herhangi bir garip etkinliğe ortamınızdan yanlış yapılandırmalarla ilgili açıklayıcı bir mesaj eşlik etmesini sağlamak için birkaç koşulu kontrol eder.

Tam örnek uygulama

import autorefresh from 'jwt-autorefresh'

/** Events in your app that are triggered when your user becomes authorized or deauthorized. */
import { onAuthorize, onDeauthorize } from './events'

/** Your refresh token mechanism, returning a promise that resolves to the new access tokenFunction (library does not care about your method of persisting tokens) */
const refresh = () => {
  const init =  { method: 'POST'
                , headers: { 'Content-Type': `application/x-www-form-urlencoded` }
                , body: `refresh_token=${localStorage.refresh_token}&grant_type=refresh_token`
                }
  return fetch('/oauth/token', init)
    .then(res => res.json())
    .then(({ token_type, access_token, expires_in, refresh_token }) => {
      localStorage.access_token = access_token
      localStorage.refresh_token = refresh_token
      return access_token
    })
}

/** You supply a leadSeconds number or function that generates a number of seconds that the refresh should occur prior to the access token expiring */
const leadSeconds = () => {
  /** Generate random additional seconds (up to 30 in this case) to append to the lead time to ensure multiple clients dont schedule simultaneous refresh */
  const jitter = Math.floor(Math.random() * 30)

  /** Schedule autorefresh to occur 60 to 90 seconds prior to token expiration */
  return 60 + jitter
}

let start = autorefresh({ refresh, leadSeconds })
let cancel = () => {}
onAuthorize(access_token => {
  cancel()
  cancel = start(access_token)
})

onDeauthorize(() => cancel())

yasal uyarı: Ben bakıcıyım


Bu konuda soru, kullandığı kod çözme işlevini gördüm. JWT'nin bir sır kullanılmadan deşifre edilebileceğini var mı? Bir sır ile imzalanan JWT ile çalışıyor mu?
Gian Franco Zabarino

3
Evet, kod çözme yalnızca istemci kod çözme işlemidir ve sırrın farkında olmamalıdır. Sır, imzanızın orijinal olarak JWT'yi oluşturmak için kullanıldığını ve hiçbir zaman istemciden kullanılmaması gerektiğini doğrulamak için JWT jetonu sunucu tarafını imzalamak için kullanılır. JWT'nin büyüsü, yükünün istemci tarafında deşifre edilebilmesi ve içerideki iddiaların gizli olarak kullanıcı arayüzünüzü oluşturmak için kullanılabilmesidir. Bunun için jwt-autorefreshkodu çözen tek şey exp, bir sonraki yenilemenin ne kadar zamanlanacağını belirleyebilmesi için iddiayı çıkarmaktır .
cchamberlain

1
Oh bilmek iyi, bir şey mantıklı değil ama şimdi öyle. Cevap için teşekkürler.
Gian Franco Zabarino

4

Belirteç verilerine bir değişken ekleyerek bu sorunu çözdüm:

softexp - I set this to 5 mins (300 seconds)

expiresInKullanıcının tekrar oturum açmak zorunda kalması için seçeneği istediğiniz zamana ayarlıyorum . Maden 30 dakikaya ayarlandı. Bu, değerinden büyük olmalıdır softexp.

İstemci tarafı uygulamam sunucu API'sına istek gönderdiğinde (belirtecin gerekli olduğu, örn. Müşteri listesi sayfası), sunucu gönderilen belirtecin orijinal geçerlilik ( expiresIn) değerine göre hala geçerli olup olmadığını kontrol eder . Geçerli değilse, sunucu bu hataya özgü bir durumla yanıt verir, örn. INVALID_TOKEN.

Belirteç expiredIndeğere bağlı olarak hala geçerliyse , ancak değeri zaten aştıysa softexp, sunucu bu hata için ayrı bir durumla yanıt verir, örn. EXPIRED_TOKEN:

(Math.floor(Date.now() / 1000) > decoded.softexp)

İstemci tarafında, EXPIRED_TOKENyanıt alırsa , sunucuya bir yenileme isteği göndererek belirteci otomatik olarak yenilemelidir. Bu kullanıcı için şeffaf ve istemci uygulaması otomatik olarak halledilir.

Sunucudaki yenileme yöntemi, belirtecin hala geçerli olup olmadığını denetlemelidir:

jwt.verify(token, secret, (err, decoded) => {})

Sunucu, yukarıdaki yöntemde başarısız olursa belirteçleri yenilemeyi reddedecektir.


Bu strateji iyi görünüyor. Ama bence bir çeşit "maksimum yenileme" ile tamamlanmalıdır çünkü (belki) bir kullanıcı oturumu sonsuza dek hayatta olabilir.
Juan Ignacio Barisich

1
Simgenin süresinin dolmasına zorlanacak bir maksimum tarih ayarlamak için jeton verilerinde bir hardExp değişkeni veya jeton her yenilendiğinde azaltılan ve toplam jeton yenileme miktarını sınırlayan bir sayaç ayarlayabilirsiniz.
James A

1
bu doğru. Bunu bir "zorunluluk" olarak görüyorum.
Juan Ignacio Barisich

2

Bu yaklaşıma ne dersiniz:

  • Her istemci isteği için, sunucu belirtecin sona erme zamanını (currentTime - lastAccessTime) ile karşılaştırır.
  • Eğer expirationtime <(CurrentTime - lastAccessedTime) , bu CurrentTime son lastAccessedTime değiştirir.
  • Tarayıcıda expirationTime değerini aşan bir süre boyunca herhangi bir işlem yapılmaması durumunda veya tarayıcı penceresinin kapatılması ve expirationTime> (currentTime - lastAccessedTime) durumunda , sunucu jetonun süresini doldurabilir ve kullanıcıdan tekrar oturum açmasını isteyebilir.

Bu durumda jetonu yenilemek için ek son noktaya ihtiyacımız yok. Herhangi bir ücret takdir ediyorum.


Bu gün için iyi bir seçim mi, Uygulama için oldukça kolay görünüyor.
b.ben

4
Bu durumda, lastAccessedTime'ı nerede depolarsınız? Bunu arka uçta ve istek başına yapmak zorundasınız, bu yüzden istenen durumsuz bir çözüm haline gelir.
antgar9

2

Bugün, birçok insan algılanan basitlik uğruna neyi bıraktıklarının farkında olmadan JWT'lerle oturum yönetimi yapmayı tercih ediyor . Cevabım soruların 2. bölümünde ele alınmaktadır:

O zaman gerçek fayda nedir? Neden yalnızca bir jeton (JWT değil) ve son kullanma tarihini sunucuda tutmuyorsunuz?

Başka seçenekler var mı? JWT kullanımı bu senaryo için uygun değil mi?

JWT'ler temel oturum yönetimini bazı sınırlamalarla destekleyebilir. Kendini tanımlayan belirteçler olarak, sunucu tarafında herhangi bir durum gerektirmezler. Bu onları çekici kılar. Örneğin, hizmetin bir kalıcılık katmanı yoksa, yalnızca oturum yönetimi için bir katman getirmesi gerekmez.

Ancak, vatansızlık da eksikliklerinin önde gelen nedenidir. Yalnızca bir kez sabit içerik ve sona erme tarihi ile yayınlandıklarından, tipik bir oturum yönetimi kurulumuyla istediğiniz şeyleri yapamazsınız.

Yani, talep üzerine onları geçersiz kılamazsınız. Bu, önceden verilen belirteçlerin süresinin sona ermesinin bir yolu olmadığından güvenli bir çıkış yapılamayacağınız anlamına gelir . Aynı nedenden ötürü boşta kalma zaman aşımı da uygulayamazsınız . Bir çözüm bir kara liste tutmaktır, ancak bu durumu ortaya çıkarır.

Bu sakıncaları daha ayrıntılı olarak açıklayan bir yazı yazdım . Açık olmak gerekirse, daha fazla karmaşıklık ekleyerek (kayan oturumlar, yenileme jetonları vb.) Bunları geçici olarak çözebilirsiniz.

Diğer seçeneklere gelince, müşterileriniz hizmetinizle yalnızca bir tarayıcı aracılığıyla etkileşime giriyorsa, çerez tabanlı bir oturum yönetimi çözümü kullanmanızı önemle tavsiye ederim. Ayrıca, şu anda web'de yaygın olarak kullanılan bir liste kimlik doğrulama yöntemlerini derledim .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.