W .net mamy bezpieczeństwo oparte na rolach. Dzięki temu można sprawdzić tożsamość użytkownika i weryfikować jego prawa do zasobów. Można to zrobić na dwa sposoby:
Dostęp do danych zalogowanego użytkownika w systemie można uzyskać poprzez wykorzystanie klasy WinsowsIdentity.
WindowsIdentity current = WindowsIdentity.GetCurrent();
Potrzebna jest tutaj przestrzeń nazw System.Security.Principal .
Znając tożsamość użytkownika możemy sprawdzić, czy jest przypisany do określonej roli.
WindowsPrincipal currentP = new WindowsPrincipal(current);
if(currentP.IsInRole(WindowsBuiltInRole.Administrator)){...}
W ten sposób, można kontrolować, kto wykonuje nasz kod i na tej podstawie pozwalać lub zabraniać wykonania części kodu.
Autoryzacja deklaratywna pozwala na określenie niezbędnych uprawnień dla całej klasy lub metody. Na początek trzeba ustawić politykę bezpieczeństwa:
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
Dopiero można wykorzystać PrincipalPermission w klasie
class Manager
{
[PrincipalPermission(SecurityAction.Demand, Role="Managers")]
static public void GetDocs()
{
Console.WriteLine("Manager operation");
}
}
…
try
{
Manager.GetDocs();
}
catch (System.Security.SecurityException e)
{
Console.WriteLine("Only for managers");
Console.WriteLine(e.PermissionState);
}
Autoryzacja programowa pozwala wejść do wnętrza metod i żądać autoryzacji dostępu do konkretnych partii kodu.
try
{
PrincipalPermission pp = new PrincipalPermission(null, System.Environment.MachineName +
@"\Administrators" , true);
pp.Demand();
//restricted operations
}
catch (System.Security.SecurityException e)
{
Console.WriteLine("Access denied");
}
Oczywiście jest to dobry sposób, kiedy piszemy aplikację dla sieci wewnętrznej i wiemy dokładnie jacy użytkownicy będą korzystać z aplikacji i jakie mają przypisane role. Niestety nie jest to dobry sposób autoryzacji i uwierzytelnienia dla stron internetowych, których odbiorcą może być każdy.
Brak komentarzy:
Prześlij komentarz