JSON web token JWT nedir?

Sanırım son zamanlarda gördüğüm en saçma yanıttı. JWT JSON bazlı tüm platformlarda implemente edebileceğin bir protokoldür.
Doğru diyorsun PHP biraz eski ve modern değil bundan dolayı herhangi bir şekilde JavaScript ile karşılaştırılamaz ve karşılaştırılıp daha iyi olduğu iddia edilemez(!)

Maalesef çok bilenler hep beni yoruyor.

PHP:
session_start(); 
                         $_SESSION['extranet']['username'] = $row["username"];
                          $_SESSION['extranet']['email'] = $row["email"];
                          $_SESSION['extranet']['id'] = $row["id"];
                          $_SESSION['extranet']['salt1'] = $row["salt"];
                          $_SESSION['extranet']['salt2'] = $row["salt2"];
                          $_SESSION['extranet']['active'] = $row["active"];
                          $_SESSION['extranet']['name'] = $row["name"];
                          $_SESSION['extranet']['surname'] = $row["surname"];
                          $_SESSION['extranet']['department_id'] = $row["department_id"];
                          $_SESSION['extranet']['department_name'] = $row["department_name"];
                          $_SESSION['extranet']['title_name'] = $row["title_name"];
                          $_SESSION['extranet']['multi_department'] = $row["is_multi_department"];
                          $_SESSION['extranet']['multi_departments'] = json_decode($row["multi_departments"],true);

$JSONPayload = json_encode($_SESSION);
 
Doğru diyorsun PHP biraz eski ve modern değil bundan dolayı herhangi bir şekilde JavaScript ile karşılaştırılamaz ve karşılaştırılıp daha iyi olduğu iddia edilemez(!)

Maalesef çok bilenler hep beni yoruyor.

PHP:
session_start();
 $_SESSION['extranet']['username'] = $row["username"];
 $_SESSION['extranet']['email'] = $row["email"];
 $_SESSION['extranet']['id'] = $row["id"];
 $_SESSION['extranet']['salt1'] = $row["salt"];
 $_SESSION['extranet']['salt2'] = $row["salt2"];
 $_SESSION['extranet']['active'] = $row["active"];
 $_SESSION['extranet']['name'] = $row["name"];
 $_SESSION['extranet']['surname'] = $row["surname"];
 $_SESSION['extranet']['department_id'] = $row["department_id"];
 $_SESSION['extranet']['department_name'] = $row["department_name"];
 $_SESSION['extranet']['title_name'] = $row["title_name"];
 $_SESSION['extranet']['multi_department'] = $row["is_multi_department"];
 $_SESSION['extranet']['multi_departments'] = json_decode($row["multi_departments"],true);

$JSONPayload = json_encode($_SESSION);

Dostum ne kadar tecrübelisin bilmiyorum ama PHP eski vs diyen olmadı zaten Laravel 9 ile halen daha e-para uygulaması geliştiren bir ekipte Backend liderliği yapıyorum. Senin dediğin JWT = PHP Session Token'di ve yanlıştı.

Mesele kolektif olarak forumdaki insanları doğru bilgiye ulaştırmaktır. Yanlış Bir bilgi çıktığında yanlış olduğunu söylemek forum üyesi olarak bir görevdir.

Demek ki bilen insanlara yanlış gelen bilgileri çok fazla yaymışsın ki yormuşlar seni :)
 
Değerli cevaplarınız için teşekkür ederim , peki bu token oluşturulduktan sonra kullanıcı tarayıcıyı kapattı ne olucak ? token kişinin ip bilgisine mi tanımlı oluyor ?
 
Değerli cevaplarınız için teşekkür ederim , peki bu token oluşturulduktan sonra kullanıcı tarayıcıyı kapattı ne olucak ? token kişinin ip bilgisine mi tanımlı oluyor ?
Token içerisinde expire değeri mevcut. Ayrıca token tarayıcı cookielerine kaydedilir. Siteye giriş yapıldığında cookieden bu değeri okursun. Expire olmuşsa yeni bir token alırsın veya login sayfasına yönlendirirsin.
Expire olup olmadığını sunucu yapar. Yeni token alma olayını "jwt refresh token" olarak aratabilirsin.
 
Token içerisinde expire değeri mevcut. Ayrıca token tarayıcı cookielerine kaydedilir. Siteye giriş yapıldığında cookieden bu değeri okursun. Expire olmuşsa yeni bir token alırsın veya login sayfasına yönlendirirsin.
Expire olup olmadığını sunucu yapar. Yeni token alma olayını "jwt refresh token" olarak aratabilirsin.
Yani hocam anladığım kadarıyla jwt sistemi kullanıcı giriş yaptığında ona username, user_id vb benim belirlediğim değerleri kapalı bir tokende kapalı olarak tutuyor ve buna bir expire süresi tanımlıyor (yine benim belirlediğim bir süreyi) daha sonra kullanıcı aynı bilgisayar üzerinden giriş yapmış ise ve expire süresi dolmamış ise oturum açıyor.
 
Yani hocam anladığım kadarıyla jwt sistemi kullanıcı giriş yaptığında ona username, user_id vb benim belirlediğim değerleri kapalı bir tokende kapalı olarak tutuyor ve buna bir expire süresi tanımlıyor (yine benim belirlediğim bir süreyi) daha sonra kullanıcı aynı bilgisayar üzerinden giriş yapmış ise ve expire süresi dolmamış ise oturum açıyor.
Elimizde bir JWT token olduğunu farz edelim:
eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJleHAiOjAsInVzZXIiOnsiY3JlYXRlZF9hdCI6IjIwMjMtMTEtMTVUMDc6NTU6MDMuMTg0NTgxWiIsImRlbGV0ZWRfYXQiOiIwMDAxLTAxLTAxVDAwOjAwOjAwWiIsImlkIjoxLCJpc19hY3RpdmUiOnRydWUsIm5hbWUiOiJUZXN0Iiwic3VybmFtZSI6IjEiLCJ0YXhwYXllcl9pZCI6MSwidXBkYXRlZF9hdCI6IjIwMjMtMTEtMTVUMDc6NTU6MDUuMDc4MTAzWiIsInVzZXJuYW1lIjoidGVzdDEifX0.Og4PSRzCygccr3hyEDf1Ct2YX9lx5JSyPEfj_1zsOc6up5q6UNEeo3-OrRgRTIm22ptqKmK7DWnMrDa71uPhug

bunu çözümlediğimizde alttaki JSON'a ulaşırız:

JSON:
{
  "authorized": true,
  "exp": 0,
  "user": {
    "created_at": "2023-11-15T07:55:03.184581Z",
    "deleted_at": "0001-01-01T00:00:00Z",
    "id": 1,
    "is_active": true,
    "name": "Test",
    "surname": "1",
    "taxpayer_id": 1,
    "updated_at": "2023-11-15T07:55:05.078103Z",
    "username": "test1"
  }
}

bu örnekte exp değeri 0 olduğu için herhangi bir expire time yok.

gördüğün üzere user'a dair ne gerekli görüldüyse koyulmuş.

üstteki ey ile başlayan token hangi bilgisayarda olursa olsun tüm bilgisayarlarca girilebilir.

sistem server-side olduğu için herhangi bir yetkilendirmeye gerek duyulmamış kendi içinde user_id üzerinden her işleminde kontrol ediyor.

Elimizde bir JWT token olduğunu farz edelim:
eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJleHAiOjAsInVzZXIiOnsiY3JlYXRlZF9hdCI6IjIwMjMtMTEtMTVUMDc6NTU6MDMuMTg0NTgxWiIsImRlbGV0ZWRfYXQiOiIwMDAxLTAxLTAxVDAwOjAwOjAwWiIsImlkIjoxLCJpc19hY3RpdmUiOnRydWUsIm5hbWUiOiJUZXN0Iiwic3VybmFtZSI6IjEiLCJ0YXhwYXllcl9pZCI6MSwidXBkYXRlZF9hdCI6IjIwMjMtMTEtMTVUMDc6NTU6MDUuMDc4MTAzWiIsInVzZXJuYW1lIjoidGVzdDEifX0.Og4PSRzCygccr3hyEDf1Ct2YX9lx5JSyPEfj_1zsOc6up5q6UNEeo3-OrRgRTIm22ptqKmK7DWnMrDa71uPhug

bunu çözümlediğimizde alttaki JSON'a ulaşırız:

JSON:
{
  "authorized": true,
  "exp": 0,
  "user": {
    "created_at": "2023-11-15T07:55:03.184581Z",
    "deleted_at": "0001-01-01T00:00:00Z",
    "id": 1,
    "is_active": true,
    "name": "Test",
    "surname": "1",
    "taxpayer_id": 1,
    "updated_at": "2023-11-15T07:55:05.078103Z",
    "username": "test1"
  }
}

bu örnekte exp değeri 0 olduğu için herhangi bir expire time yok.

gördüğün üzere user'a dair ne gerekli görüldüyse koyulmuş.

üstteki ey ile başlayan token hangi bilgisayarda olursa olsun tüm bilgisayarlarca girilebilir.

sistem server-side olduğu için herhangi bir yetkilendirmeye gerek duyulmamış kendi içinde user_id üzerinden her işleminde kontrol ediyor.
jwt.io üzerinden bakacak olursan içeriğin değiştirilebileceğini göreceksin e o zaman güvenliği yok bu icadın.

ama var değiştirdikten sonra değiştirilmiş token ile giriş yapmaya çalıştığında malformed hatası alacaksın ve işlem gerçekleştiremeyeceksin
 
Elimizde bir JWT token olduğunu farz edelim:
eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJhdXRob3JpemVkIjp0cnVlLCJleHAiOjAsInVzZXIiOnsiY3JlYXRlZF9hdCI6IjIwMjMtMTEtMTVUMDc6NTU6MDMuMTg0NTgxWiIsImRlbGV0ZWRfYXQiOiIwMDAxLTAxLTAxVDAwOjAwOjAwWiIsImlkIjoxLCJpc19hY3RpdmUiOnRydWUsIm5hbWUiOiJUZXN0Iiwic3VybmFtZSI6IjEiLCJ0YXhwYXllcl9pZCI6MSwidXBkYXRlZF9hdCI6IjIwMjMtMTEtMTVUMDc6NTU6MDUuMDc4MTAzWiIsInVzZXJuYW1lIjoidGVzdDEifX0.Og4PSRzCygccr3hyEDf1Ct2YX9lx5JSyPEfj_1zsOc6up5q6UNEeo3-OrRgRTIm22ptqKmK7DWnMrDa71uPhug

bunu çözümlediğimizde alttaki JSON'a ulaşırız:

JSON:
{
  "authorized": true,
  "exp": 0,
  "user": {
    "created_at": "2023-11-15T07:55:03.184581Z",
    "deleted_at": "0001-01-01T00:00:00Z",
    "id": 1,
    "is_active": true,
    "name": "Test",
    "surname": "1",
    "taxpayer_id": 1,
    "updated_at": "2023-11-15T07:55:05.078103Z",
    "username": "test1"
  }
}

bu örnekte exp değeri 0 olduğu için herhangi bir expire time yok.

gördüğün üzere user'a dair ne gerekli görüldüyse koyulmuş.

üstteki ey ile başlayan token hangi bilgisayarda olursa olsun tüm bilgisayarlarca girilebilir.

sistem server-side olduğu için herhangi bir yetkilendirmeye gerek duyulmamış kendi içinde user_id üzerinden her işleminde kontrol ediyor.


jwt.io üzerinden bakacak olursan içeriğin değiştirilebileceğini göreceksin e o zaman güvenliği yok bu icadın.

ama var değiştirdikten sonra değiştirilmiş token ile giriş yapmaya çalıştığında malformed hatası alacaksın ve işlem gerçekleştiremeyeceksin.
Teşekkür ederim , tokenin içinde password saklamak çok mantıklı bir seçim değil anladığım kadarıyla , çünkü çözümlediğin zaman kullanıcının password'üne ulaşabilir token içinde role , user_id gibi değişkenleri saklamak daha mantıklı olur herhalde hocam doğrumudur ?
 
JWT, Node veya JavaScript ile geliştirilmiş uygulamalar için kullanıcı oturum kaydı. Her kullanıcı girişine benzersiz bir Token oluşturur ve session (oturum) tanımlar.

PHP Session = JS JWT

Olay bu dediginin tam tersi.

Stateless server yapabilmek icin zaten JWT var.
Senin PHP, JS, .NET vs platformlarda kullandigin server-side session'a ihtiyac olmasin diye.
 

Yeni konular

Geri
Yukarı