Özgün yorumu, anlatıldığı şekilde söylemeyi seçmezdim, ancak potansiyel olarak meşru bir sorunu tespit ediyor .
Spesifik olarak, ayırma emrinin onaylanma ve yetkilendirme olduğu endişeleridir .
Kimlik doğrulama , giriş yapma ve kimlik alma işlemini ifade eder. Sistemler sizin kim olduğunuzu bilir ve kişiselleştirme, nesne mülkiyeti, vb. Gibi şeylerde kullanılır.
Yetkilendirme atıfta yapmanız izin ne ve bu (genellikle) olan değil tarafından belirlenen Kim . Bunun yerine, adınız veya e-posta adresiniz gibi şeylerle ilgilenmeyen roller veya izinler gibi bazı güvenlik politikaları tarafından belirlenir.
Bu ikisi birbirine dik olarak değişebilir. Örneğin, kimlik doğrulama modelini OpenID / OpenAuth sağlayıcılarını ekleyerek değiştirebilirsiniz. Güvenlik politikasını yeni bir rol ekleyerek veya RBAC'den ABAC'ye değiştirerek değiştirebilirsiniz.
Bunların hepsi bir sınıfa veya soyutlamaya girerse, risk azaltma için en önemli araçlarınızdan biri olan güvenlik kodunuz ironik bir şekilde yüksek riskli olur.
Kimlik doğrulama ve yetkilendirmenin çok sıkı bağlandığı sistemler ile çalıştım. Bir sistemde, her biri bir tür "rol" için iki paralel kullanıcı veritabanı vardı. Görünüşe göre, onu tasarlayan kişi veya ekip, tek bir fiziksel kullanıcının her iki rolde olabileceğini veya birden fazla rolde ortak olan bazı eylemler olabileceğini veya Kullanıcı Kimliği çarpışmalarında sorun olabileceğini düşünmemiştir. Bu kuşkusuz aşırı bir örnek, ancak çalışmak için inanılmaz derecede acı vericiydi.
Microsoft ve Sun / Oracle (Java) , Güvenlik Sorumlusu olarak kimlik doğrulama ve yetkilendirme bilgilerinin toplamını ifade eder . Mükemmel değil, ama oldukça iyi çalışıyor. .NET, örneğin, sahip , hangi kapsüller - Eski bir varlık politikası (yetki) nesne ikincisi bir iken kimlik (doğrulama). Birini diğerinin içine koyma kararını makul bir şekilde sorgulayabilirsiniz , ancak önemli olan, yazdığınız çoğu kodun soyutlamalardan yalnızca biri için olacağıdır ; bu, test edilmesi ve yeniden yapılandırmanın kolay olduğu anlamına gelir.IPrincipal
IIdentity
Bir User.IsAdmin
alanla ilgili yanlış olan bir şey yok ... aynı zamanda bir alan olmadığı süreceUser.Name
. Bu, "Kullanıcı" kavramının doğru tanımlanmadığını ve ne yazık ki, güvenlik söz konusu olduğunda kulakların arkasında biraz ıslanan geliştiriciler arasında çok yaygın bir hata olduğunu gösterecektir. Tipik olarak, kimlik ve politika ile paylaşılması gereken tek şey, tesadüfen değil, hem Windows hem de * nix güvenlik modellerinde tam olarak nasıl uygulandığı olan Kullanıcı Kimliğidir.
Hem kimliği hem de politikayı içine alan sarıcı nesneler oluşturmak tamamen kabul edilebilir. Örneğin, mevcut kullanıcının erişmesine izin verilen çeşitli widget'lara veya bağlantılara ek olarak "merhaba" mesajı görüntülemeniz gereken bir gösterge paneli ekranı oluşturulmasını kolaylaştıracaktır. Bu sarmalayıcı yalnızca kimlik ve politika bilgilerini tamamladığı ve kendisine ait olduğunu iddia etmediği sürece. Başka bir deyişle, toplu bir kök olarak sunulmadığı sürece .
Basit bir güvenlik modeli , yeni bir uygulama tasarlarken, YAGNI ve diğer şeylerden ötürü her zaman iyi bir fikir gibi gözükse de, neredeyse her zaman sizi daha sonra ısırmaya başlıyor, çünkü sürpriz sürpriz, yeni özellikler eklendi!
Bu nedenle, sizin için neyin en iyisini biliyorsanız, kimlik doğrulama ve yetkilendirme bilgilerini ayrı tutabilirsiniz. Şu anda "yetkilendirme", "IsAdmin" bayrağı kadar basit olsa bile, kimlik doğrulama bilgileriyle aynı sınıf veya tablonun bir parçası değilse, güvenlik politikanızın ne zaman ve ne zaman yapması gerekiyorsa, yine de daha iyi olursunuz. değiştir, zaten iyi çalışan kimlik doğrulama sistemlerinizde rekonstrüktif cerrahi yapmanız gerekmez.