Opak Erişim Belirteci vs JWT
Opak erişim belirteçleri ile JWT (JSON Web Tokens) arasındaki farkları, kullanım durumlarını ve OIDC tabanlı sistemlerde nasıl doğrulandıklarını anlayın.
Opak erişim belirteçleri ile JWT (JSON Web Tokens) arasındaki farkları, kullanım durumlarını ve OIDC tabanlı sistemlerde nasıl doğrulandıklarını anlayın.
Logto'da, bir OIDC tabanlı kapsamlı CIAM platformu olarak, yetkilendirme belirteçleri, kullanıcı etkileşimlerinin güvenli hale getirilmesinde ve kaynaklara erişimin yönetilmesinde kritik bir rol oynar. Yetkilendirme için kullanılan çeşitli belirteç türleri arasında, opak belirteçler ve JWT'ler (JSON Web Tokens) en önemli olanlardır.
Topluluğumuzdan birkaç soru aldık, örneğin: Opak bir belirteç ile JWT arasındaki fark nedir? Aldığım erişim belirtecini neden çözemiyorum ve neden belirteç uzunluğu kısa görünüyor? Bu blog yazısı, bu kavramları açıklığa kavuşturmayı ve opak belirteçlerle JWT'ler arasındaki farklılıkları, kullanım durumlarını anlamanızı sağlamayı amaçlıyor.
Opak bir belirteç, erişim belirteçleridir ve adı gereği, istemci veya herhangi bir dış taraf için opaktır veya şeffaf değildir. Bu, belirtecin kendisinin kullanıcı veya verilen yetkilendirme hakkında okunabilir bilgi taşımadığı anlamına gelir.
Bir opak belirteç aldığınızda, genellikle rastgele bir karakter dizisi gibi görünür ve onu çözmeye çalışmak hiçbir anlamlı veri sağlamaz.
İşte bir opak belirtecin örneği:
Belirtecin gerçek içeriği yalnızca onu veren yetkilendirme sunucusu tarafından bilindiğinden, bir opak belirteci doğrulamak için istemci onu sunucuya geri göndermelidir, bu da daha sonra belirtecin geçerliliğini doğrular ve ilişkili izinleri belirler. Bu yaklaşım, hassas bilgilerin gizli kalmasını sağlarken ek bir güvenlik katmanı sağlar, ancak belirtecin doğrulanması için ek sunucu iletişimi gerektirir.
Artılar:
Eksiler:
Opak belirteçlerin aksine, JWT (JSON Web Token) yapılandırılmış ve okunabilir bir formatta bilgi taşıyan bağımsız, durumsuz bir belirteçtir.
Bir JWT, üç bölümden oluşur: header, payload ve signature ve her biri Base64URL ile kodlanmıştır.
İşte bir JWT örneği:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5cheader, belirtecin türü ve imzalama için kullanılan algoritma hakkında bilgi içerir. Örneğin, {"alg": "HS256", "typ": "JWT"}.payload bölümü, kullanıcı veya yetkilendirme hakkında bilgiler içeren iddiaları içerir, örneğin kullanıcı kimliği, bitiş zamanı ve kapsamlar gibi. Bu veri kodlanmış ancak şifrelenmemiş olduğundan, belirtece sahip olan herkes iddiaları görerek belirteci çözümleyebilir ancak imzayı geçersiz kılmadan değiştiremez. Belirteç, kendi kendine yeterli doğasını bu şekilde kazanır. Örneğin, {"sub": "1234567890", "name": "John Doe", "iat": 1516239022}.signature, önceden belirtilen algoritmayı kullanarak header, payload ve gizli bir anahtar birleştirilerek oluşturulur. Bu imza, belirtecin bütünlüğünün doğrulanması ve üzerindeki değişikliklerin tespit edilmesini sağlar.JWT'ler, istemci veya herhangi bir hizmet tarafından yerel olarak doğrulanabilir olduğu için yaygın olarak kullanılır, bu sayede yetkilendirme sunucusuyla etkileşime ihtiyaç duyulmadan doğrulanabilir. Bu, JWT'leri dağıtık sistemler için özellikle verimli kılar, çünkü birden fazla hizmet belirtecin geçerliliğini bağımsız olarak doğrulamak isteyebilir.
Ancak, bu kolaylık aynı zamanda belirtecin iddialarının aşırı derecede maruz kalmasını önleme sorumluluğunu da getirir, çünkü belirtece erişimi olan herkese görünür olabilirler. Ayrıca, JWT'ler genellikle kısa ömürlüdür ve belirtecin iddialarından biri olarak bitiş zamanı içerilir, bu şekilde belirtecin süresiz geçerli olmayacağı garanti altına alınır.
Artılar:
Eksiler:
Opak bir erişim belirteci, yetkilendirme sunucusuna doğrulama için geri gönderildiğinde doğrulanır. Yetkilendirme sunucusu, çıkarılan belirteçlerin durumunu saklar ve dahili deposuna dayalı olarak belirteç geçerliliğini belirleyebilir.
Bir JWT erişim belirteci, belirtecin açık anahtarına erişimi olan herhangi bir hizmet veya istemci tarafından çevrimdışı olarak doğrulanabilir.
OIDC (OpenID Connect) bağlamında, opak belirteçler ve JWT'ler farklı amaçlara hizmet eder ve farklı senaryolarda kullanılır.
Varsayılan olarak, bir istemci bir kaynak belirtmeden ve openid kapsamını ekleyerek bir erişim belirteci talep ettiğinde, yetkilendirme sunucusu opak bir erişim belirteci çıkarır. Bu belirteç, öncelikle OIDC /oidc/userinfo uç noktasından kullanıcı profili bilgilerini almak için kullanılır. İstemciden opak erişim belirteci ile bir istek aldığında, yetkilendirme sunucusu, ilişkili yetkilendirme bilgisini almak için dahili deposunu kontrol eder ve kullanıcının profil ayrıntılarını yanıtlamadan önce belirtecin geçerliliğini doğrular.
Yenileme belirteçleri yalnızca istemci ve yetkilendirme sunucusu arasında değiştirilecek şekilde tasarlanmıştır ve kaynak sağlayıcılarla paylaşılmasına gerek yoktur. Bu nedenle, yenileme belirteçleri tipik olarak opak belirteç olarak verilir. Mevcut erişim belirteci süresi dolduğunda, istemci opak yenileme belirtecini yeni bir erişim belirteci elde etmek için kullanabilir ve kullanıcının yeniden kimlik doğrulaması olmadan sürekli erişimi sağlar.
OIDC'de, kimlik belirteci, kullanıcı bilgilerini içeren ve kullanıcıyı kimlik doğrulayan bir JWT'dir. Genellikle erişim belirtecinin yanında verilen kimlik belirteci, istemcinin kullanıcının kimliğini doğrulamasına olanak tanır. Örneğin:
İstemci, kimlik doğrulayıcısının kimliğini doğrulamak ve kişiselleştirme veya yetkilendirme amaçları için kullanıcı bilgilerini çıkarmak için kimlik belirtecini doğrulayabilir. Kimlik belirteci, yalnızca tek seferlik kullanım içindir ve API kaynağı yetkilendirmesi için kullanılmamalıdır.
İstemci, belirli bir kaynak göstergesi ile erişim belirteci talep ettiğinde, yetkilendirme sunucusu, bu kaynağa erişim amacıyla bir JWT erişim belirteci verir. JWT, kaynak sağlayıcısının istemcinin erişimini yetkilendirmek için kullanabileceği iddialar içerir. Örneğin:
Kaynak sağlayıcı, iddiaları kontrol ederek isteği doğrulayabilir:
iss: Jetonun güvenilir bir yetkilendirme sunucusu tarafından verilen olduğunu doğrular.sub: Belirteçle ilişkili kullanıcıyı tanımlar.aud: Belirtecin belirli bir kaynak için verildiğini garanti eder.scope: Kullanıcıya verilen izinleri doğrular.Özetle, opak belirteçler ve JWT'ler, OIDC tabanlı sistemlerde farklı amaçlara hizmet eder, opak belirteçler güvenli ve durumlu bir yöntem sunarken, JWT'ler bağımsız ve durumsuz bir alternatif sunar. Bu belirteç türlerinin arasındaki farkları ve kullanım durumlarını anlamak, uygulamalarınızda güvenli ve verimli kimlik doğrulama ve yetkilendirme mekanizmaları tasarlamak için gereklidir.
Logto'daki daha fazla erişim belirteci özelliğini keşfedin: