Sorunuzu okuduğumda, internette Bearer tokenlerinin nasıl şifrelenmiş veya imzalanmış olduğunu araştırmayı denedim. Taşıyıcı belirteçleri (belki kısmen, ama tamamen değil) karma değildir sanırım çünkü bu durumda, şifresini çözmek ve ondan kullanıcıların özelliklerini almak mümkün olmayacaktır.
Ancak sorunuz, Bearer token işlevselliği hakkında cevaplar bulmaya çalışıyor gibi görünüyor:
Bir yetkilendirme sağlayıcısı uyguladığımı varsayalım, taşıyıcı simgesi için herhangi bir dize sağlayabilir miyim? Rastgele bir dize olabilir mi? Bazı niteliklerin base64 kodlaması olmalı mı? Karma mı olmalı?
Bu yüzden, Taşıyıcı belirteçleri ve Yenileme belirteçlerinin nasıl çalıştığını açıklamaya çalışacağım:
Kullanıcı sunucudan SSL aracılığıyla kullanıcı ve parola gönderen bir belirteç istediğinde, sunucu iki şey döndürür: Erişim belirteci ve Yenileme belirteci .
Erişim belirteci, somut kullanıcı olarak kimlik doğrulaması için tüm istek başlıklarına eklemeniz gereken bir Taşıyıcı belirtecidir.
Authorization: Bearer <access_token>
Erişim belirteci, istediğiniz tüm Kullanıcı özelliklerine, Hak Taleplerine ve Rollerine sahip şifreli bir dizedir. (Daha fazla rol veya hak talebi eklerseniz token boyutunun arttığını kontrol edebilirsiniz). Kaynak Sunucu bir erişim belirteci aldığında, şifresini çözebilir ve bu kullanıcı özelliklerini okuyabilir. Bu şekilde, kullanıcı tüm uygulama ile birlikte onaylanacak ve verilecektir.
Erişim belirteçlerinin süresi kısa (ör. 30 dakika). Erişim belirteçlerinin uzun bir süre dolması olsaydı, bu bir sorun olurdu, çünkü teorik olarak onu iptal etme olanağı yoktur. Bu yüzden "Kullanıcı" olarak değiştirilen role = "Yönetici" olan bir kullanıcı düşünün. Bir kullanıcı eski simgeyi role = "Admin" ile tutarsa, jeton sona erene kadar Yönetici haklarıyla erişebilir. Bu nedenle erişim belirteçlerinin süresi kısa.
Ancak akılda bir konu var. Bir erişim belirtecinin süresinin kısa olması durumunda, her kısa dönemde kullanıcı ve şifreyi göndermemiz gerekir. Bu güvenli mi? Hayır, değil. Bundan kaçınmalıyız. İşte o zaman Yenile tokenleri bu sorunu çözüyor.
Yenileme simgeleri DB'de depolanır ve süresinin dolması uzun olur (örnek: 1 ay).
Bir kullanıcı, ilk belirteç isteğinde aldığı bir yenileme belirteci kullanarak (örneğin her 30 dakikada bir sona erdiğinde) yeni bir Erişim belirteci alabilir. Bir erişim belirtecinin süresi dolduğunda, istemci bir yenileme belirteci göndermelidir. DB'de bu yenileme belirteci varsa, sunucu istemciye yeni bir erişim belirteci ve başka bir yenileme belirteci döndürür (ve eski yenileme belirtecini yenisiyle değiştirir).
Bir kullanıcı Erişim belirtecinin güvenliği ihlal edilmişse, söz konusu kullanıcının yenileme belirtecinin DB'den silinmesi gerekir. Bu şekilde jeton yalnızca erişim jetonu sona erene kadar geçerli olacaktır, çünkü bilgisayar korsanı yenileme jetonunu gönderen yeni bir erişim jetonu almaya çalıştığında bu eylem reddedilir.