Konuyu Açan
#1
id ile Kullanıcı Kimliği
Bir web uygulamasında kullanıcı kimliğini güvenli ve açıkça anlaşılır bir biçimde tasarlamak, kullanıcı deneyimini doğrudan etkiler. Bu yazıda, id (kimlik) kavramını, oturum sistemiyle ilişkisinin nasıl çalıştığını ve uygulamada hangi noktalara dikkat edilmesi gerektiğini somut örneklerle ele alacağım.
[ i ]
Kapsamlı bir örnek üzerinden bakarsak: bir kullanıcı kaydı olduğunda veritabanında id olarak UUID üretilir. Oturum açıldığında bu kullanıcı id kullanılarak oturum serialized edilir ve sunucu tarafında oturum kaydı tutulabilir. İlgili servisler, id üzerinden ilgili kullanıcı profilini çekip politika doğrultusunda işlemleri sınırlar. Uygulama güvenliğinde, id tek başına güvenli değildir; bununla birlikte güvenli taşıma, düzgün yetkilendirme ve düzenli güvenlik taramaları ile birlikte kullanılır.
Bu konudaki tercihleriniz ne yönde oldu? UUID mi yoksa sayısal aralıklı id’ler mi tercih ediyorsunuz? Oturum belirteçlerinde hangi stratejiyi kullanıyorsunuz ve bunu hangi güvenlik önlemleriyle destekliyorsunuz?
Bir web uygulamasında kullanıcı kimliğini güvenli ve açıkça anlaşılır bir biçimde tasarlamak, kullanıcı deneyimini doğrudan etkiler. Bu yazıda, id (kimlik) kavramını, oturum sistemiyle ilişkisinin nasıl çalıştığını ve uygulamada hangi noktalara dikkat edilmesi gerektiğini somut örneklerle ele alacağım.
[ i ]
- Temel kavram: Kullanıcı kimliği, bir kullanıcının sistemi tanımlamak için taşıdığı benzersiz bir değerdir. Bu değer genelde veritabanında kullanıcı kayıtlı olduğu anda üretilir ve oturum süresince bileşkesi olarak kullanılır. Örneğin bir kullanıcı için benzersiz bir kullanıcıID ya da UUID kullanılabilir. Bu değer, kullanıcıyı rahatsız edici şekilde tahmin edilemeyecek biçimde tasarlanmalıdır.
- Güvenlik ilkesine bağlı kalma: Kimlik bilgileri ile kimlik doğrulama arasındaki ayrımı net tutmak gerekir. Oturum açıldığı anda kullanıcıya verilen geçici bir oturum belirteci (session token) veya JWT, kullanıcı kimliğini taşıyabilir, fakat neden-sonuç ilişkisini doğru kurmak için bu belirteçlerin güvenli saklanması şarttır.
- Depolama ve erişim: Kimlik alanı genelde kullanıcı tablolarında tutulur ve ilişkilendirmeler üzerinden erişilir. Bu alanın doğru tipte olması (örn. unsigned int, UUID) ve indekslenmesi sorgu performansını artırır. Ayrıca zorunlu olmayan veya hassas bilgiler ile karıştırılmamalıdır.
- Kimlik ile yetkilendirme arasındaki fark: Kimlik, “bu kullanıcı kimdir” sorusuna cevap verir; yetkilendirme ise “bu kullanıcı ne yapabilir” sorusunu belirler. Örneğin id üzerinden bir kullanıcının admin olup olmadığını kontrol etmek ayrı bir yetkilendirme katmanıdır.
- Oturum güvenliği: Oturum süresince id’nin güvenli taşınması kritik. HttpOnly ve Secure bayraklarıyla saklanan çerezler ya da güvenli depolama alanları, id’nin ele geçirilmesini zorlaştırır. Ayrıca CSRF ve XSS korumalarını da dikkate almak gerekir.
- Güncel uygulama desenleri: Mikro hizmet mimarisinde her hizmet kendi kullanıcı kimliğine sahip olabilir ve kimlik doğrulama merkezi üzerinden doğrulanabilir. Ayrıca erişim tokenlarının kısa ömürlü olması ve periyodik yenilenmesi güvenliği artırır.
Kapsamlı bir örnek üzerinden bakarsak: bir kullanıcı kaydı olduğunda veritabanında id olarak UUID üretilir. Oturum açıldığında bu kullanıcı id kullanılarak oturum serialized edilir ve sunucu tarafında oturum kaydı tutulabilir. İlgili servisler, id üzerinden ilgili kullanıcı profilini çekip politika doğrultusunda işlemleri sınırlar. Uygulama güvenliğinde, id tek başına güvenli değildir; bununla birlikte güvenli taşıma, düzgün yetkilendirme ve düzenli güvenlik taramaları ile birlikte kullanılır.
Bu konudaki tercihleriniz ne yönde oldu? UUID mi yoksa sayısal aralıklı id’ler mi tercih ediyorsunuz? Oturum belirteçlerinde hangi stratejiyi kullanıyorsunuz ve bunu hangi güvenlik önlemleriyle destekliyorsunuz?
