C# Academy · Lekcja

Autoryzacja oparta na rolach

Ograniczaj dostęp do endpointów na podstawie ról użytkowników.

Lekcja 1 z 413 kroki

Autoryzacja oparta na rolach to bezpłatna lekcja C# Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C# Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C# Academy zawiera 4 lekcji w sumie.

Uwierzytelnianie a autoryzacja

Uwierzytelnianie odpowiada na pytanie „kim jesteś?”. Autoryzacja odpowiada na pytanie „co wolno Ci robić?”.

Najprostszym modelem autoryzacji w ASP.NET Core jest model oparty na rolach: użytkownik należy do ról, a endpointy wymagają określonych ról.

// User has roles: admin, editor
// Endpoint requires: admin

Skąd pochodzą role

Rola to po prostu claim typu ClaimTypes.Role. Podczas wystawiania tokenu JWT należy dodać jeden claim roli dla każdej roli użytkownika.

var claims = new List<Claim>
{
    new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
    new Claim(ClaimTypes.Role, "admin"),
    new Claim(ClaimTypes.Role, "editor")
};

Typ claima roli

Aby elementy [Authorize(Roles=...)] i User.IsInRole działały, handler musi wiedzieć, który typ claima reprezentuje rolę.

Klucz JWT role jest domyślnie mapowany na ClaimTypes.Role. W przypadku użycia niestandardowego klucza należy wskazać go weryfikatorowi za pomocą RoleClaimType.

options.TokenValidationParameters = new TokenValidationParameters
{
    RoleClaimType = ClaimTypes.Role
};

Wymaganie jednej roli

Do kontrolera lub akcji należy zastosować [Authorize(Roles = "admin")]. Dostęp mogą uzyskać tylko użytkownicy z rolą admin.

[Authorize(Roles = "admin")]
[HttpDelete("users/{id}")]
public IActionResult DeleteUser(int id)
{
    // only admins reach here
    return NoContent();
}

Wymaganie dowolnej z kilku ról

Lista rozdzielana przecinkami oznacza operator OR: użytkownik musi mieć co najmniej jedną z wymienionych ról.

[Authorize(Roles = "admin,editor")]
[HttpPut("articles/{id}")]
public IActionResult Update(int id) => Ok();
// admins OR editors are allowed

Wymaganie wielu ról (AND)

Aby wymagać wszystkich kilku ról, należy umieścić wiele atrybutów [Authorize]. Każdy z nich musi zostać spełniony.

[Authorize(Roles = "employee")]
[Authorize(Roles = "manager")]
public IActionResult ApproveBudget() => Ok();
// must be BOTH employee AND manager

Sprawdzanie ról w kodzie

Czasami trzeba sprawdzić rolę wewnątrz treści metody, a nie tylko przy wejściu. Należy użyć User.IsInRole.

public IActionResult GetReport()
{
    var data = BuildReport();
    if (User.IsInRole("admin"))
        data.IncludeSensitiveColumns();
    return Ok(data);
}

Odpowiednik w Minimal API

Minimal API używa .RequireAuthorization z polityką definiowaną inline albo, prościej, pozwala wymagać roli za pomocą nazwanej polityki.

app.MapDelete("/users/{id}", (int id) => Results.NoContent())
   .RequireAuthorization(p => p.RequireRole("admin"));

Hierarchia ról

ASP.NET Core nie ma wbudowanej hierarchii ról. Jeśli administratorzy powinni mieć niejawnie również uprawnienia edytora, należy przy logowaniu nadać oba claims ról albo odwzorować tę zależność za pomocą polityk (w następnym kursie).

// Grant both at login if admin >= editor
new Claim(ClaimTypes.Role, "admin");
new Claim(ClaimTypes.Role, "editor");

Gdy role nie wystarczają

Role są rozwiązaniem o zgrubnej granularności. Gdy reguły zależą od danych (np. „tylko właściciel może edytować”) lub wymagają szczegółowych uprawnień, sprawdzanie ról staje się kłopotliwe.

W takich sytuacjach stosuje się autoryzację opartą na claims oraz na politykach.

// Hard to express with roles alone:
// "editors, but only for their own department"

Zwracanie 403 a 401

Jeśli użytkownik nie jest uwierzytelniony, sprawdzenie roli zwraca 401 Unauthorized. Jeśli użytkownik jest uwierzytelniony, ale nie ma wymaganej roli, otrzymuje 403 Forbidden.

// No/invalid token         -> 401 Unauthorized
// Valid token, wrong role   -> 403 Forbidden

Szybki test

Sprawdź swoją wiedzę o rolach.

Podsumowanie

Poznali Państwo autoryzację opartą na rolach:

  • Role to claims typu ClaimTypes.Role umieszczane w tokenie.
  • [Authorize(Roles = "a,b")] oznacza OR, a nakładanie atrybutów oznacza AND.
  • User.IsInRole sprawdza role w kodzie.
  • Role mają zgrubny charakter — reguły zależne od danych wymagają bogatszych modeli.

Następnie: autoryzacja oparta na claims.

Bezpłatny start

Ucz się C# dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
93
Lekcje
346

Często zadawane pytania

Czy lekcja „Autoryzacja oparta na rolach” jest bezpłatna?

Tak — pełny tekst „Autoryzacja oparta na rolach” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C# Academy, przejdź na CoddyKit PRO. Kurs C# Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Autoryzacja oparta na rolach”?

Ograniczaj dostęp do endpointów na podstawie ról użytkowników. Ćwiczysz C# Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć C# Academy?

Nie wymagamy żadnego doświadczenia. C# Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Autoryzacja oparta na rolach”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji C# Academy?

Tak. Każda lekcja C# Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Autoryzacja oparta na rolach
  2. Autoryzacja oparta na deklaracjach
  3. Autoryzacja oparta na zasadach
  4. Niestandardowe wymagania autoryzacji
← Powrót do C# Academy