0Pricing
Learn Rust Coding · Lekcja

Uwierzytelnianie i autoryzacja

Zaimplementują Państwo bezpieczne uwierzytelnianie użytkowników (np. JWT) oraz mechanizmy autoryzacji chroniące endpointy usługi webowej.

Uwierzytelnianie i autoryzacja to bezpłatna lekcja Learn Rust Coding na CoddyKit. To lekcja 3 z 3. 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 Learn Rust Coding, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn Rust Coding zawiera 3 lekcji w sumie.

Zabezpiecz swoje usługi internetowe

Witamy! W tej lekcji zagłębimy się w pojęcia uwierzytelniania i autoryzacji, które mają kluczowe znaczenie podczas tworzenia bezpiecznych usług internetowych w Rust.

Dowiedzą się Państwo, jak chronić punkty końcowe API, upewniając się, że dostęp do nich mają tylko uprawnieni użytkownicy i wyłącznie w zakresie odpowiednich uprawnień.

Uwierzytelnianie a autoryzacja

Te dwa terminy brzmią podobnie, ale oznaczają coś innego:

  • Uwierzytelnianie: Potwierdza Państwa tożsamość. Przypomina to pokazanie dokumentu tożsamości przy wejściu do budynku.
  • Autoryzacja: Określa, co wolno Państwu zrobić. Po wejściu chodzi o ustalenie, do których pomieszczeń można wejść.

Zaimplementujemy oba mechanizmy, aby zabezpieczyć nasze usługi internetowe w Rust.

Dlaczego należy zabezpieczać API?

Ochrona punktów końcowych API jest ważna z kilku powodów:

  • Prywatność danych: Chroni poufne dane użytkowników przed nieuprawnionym dostępem.
  • Integralność systemu: Zapobiega modyfikowaniu lub uszkadzaniu danych przez złośliwe osoby.
  • Zgodność: Pozwala spełniać wymagania prawne i regulacyjne (np. RODO, HIPAA).

Solidna warstwa zabezpieczeń buduje zaufanie i chroni aplikację.

JSON Web Tokens (JWT)

Popularną metodą uwierzytelniania we współczesnych usługach internetowych jest używanie JSON Web Tokens (JWT), wymawianych jako „jot”.

JWT to kompaktowy i bezpieczny dla adresów URL sposób reprezentowania oświadczeń, które mają zostać przekazane między dwiema stronami. Są często używane do bezstanowego uwierzytelniania.

Oznacza to, że serwer nie musi przechowywać informacji o sesji każdego użytkownika.

Elementy JWT: nagłówek, ładunek i podpis

JWT składa się z trzech części oddzielonych kropkami:

  • Nagłówek: Zawiera metadane tokenu, takie jak jego typ (JWT) i algorytm podpisu (np. HS256).
  • Ładunek: Zawiera „oświadczenia” – informacje o obiekcie (zwykle użytkowniku) oraz dodatkowe dane.
  • Podpis: Służy do sprawdzania, czy token nie został zmodyfikowany. Powstaje przez zakodowanie nagłówka i ładunku przy użyciu tajnego klucza.

Generowanie i weryfikowanie JWT w Rust

Zobaczmy, jak generować i weryfikować JWT za pomocą crate'u jsonwebtoken w Rust. Należy pamiętać o dodaniu do pliku Cargo.toml crate'ów jsonwebtoken, serde (z funkcją „derive”) oraz chrono (z funkcją „serde”).

Ten przykład generuje token, a następnie natychmiast go weryfikuje.

use jsonwebtoken::{encode, decode, Header, EncodingKey, DecodingKey, Validation};
use serde::{Deserialize, Serialize};
use chrono::{Utc, Duration};

#[derive(Debug, Serialize, Deserialize)]
struct Claims {
    sub: String, // Subject (user ID)
    company: String,
    exp: usize,  // Expiration time
}

fn main() {
    // --- Setup (requires crates: jsonwebtoken, serde, chrono) ---
    let secret_key = "my_super_secret_key";

    // --- 1. Generate a JWT ---
    let my_claims = Claims {
        sub: "user123".to_string(),
        company: "CoddyKit".to_string(),
        exp: (Utc::now() + Duration::minutes(10)).timestamp() as usize,
    };
    let token = encode(
        &Header::default(),
        &my_claims,
        &EncodingKey::from_secret(secret_key.as_ref()),
    ).expect("Failed to encode token");
    println!("Generated JWT:\n{}", token);
    println!("\n--- Verifying the Token ---");

    // --- 2. Verify the JWT ---
    let validation = Validation::default();
    let decoded_result = decode::<Claims>(
        &token,
        &DecodingKey::from_secret(secret_key.as_ref()),
        &validation,
    );

    match decoded_result {
        Ok(token_data) => {
            println!("Token valid!");
            println!("Subject: {}", token_data.claims.sub);
            println!("Company: {}", token_data.claims.company);
        },
        Err(err) => println!("Token invalid: {:?}", err),
    }
}

Autoryzacja: definiowanie dostępu

Po uwierzytelnieniu użytkownika (gdy wiemy, kim jest) autoryzacja określa, do jakich zasobów lub działań ma on uprawnienia.

Typowe modele autoryzacji to:

  • Kontrola dostępu oparta na rolach (RBAC): Użytkownikom przypisuje się role (np. „admin”, „editor”, „viewer”), a każda rola ma określone uprawnienia.
  • Kontrola dostępu oparta na atrybutach (ABAC): Dostęp jest przyznawany na podstawie atrybutów użytkownika, zasobu lub środowiska.

Koncepcja middleware autoryzacyjnego

W usłudze internetowej autoryzację często obsługuje middleware. Jest to kod uruchamiany przed głównym modułem obsługi trasy.

Middleware wykonuje następujące czynności:

  1. Odczytuje tożsamość uwierzytelnionego użytkownika (np. z JWT).
  2. Porównuje jego role lub uprawnienia z wymaganym poziomem dostępu do żądanego punktu końcowego.
  3. Jeśli użytkownik ma uprawnienia, pozwala kontynuować obsługę żądania; w przeciwnym razie zwraca błąd „Unauthorized” lub „Forbidden”.

Dzięki temu moduły obsługi tras pozostają przejrzyste i skupiają się na logice biznesowej.

Sprawdź swoją wiedzę

Sprawdźmy szybko, czy rozumieją Państwo uwierzytelnianie i autoryzację.

Podsumowanie: zabezpieczanie usług internetowych

Świetnie! W tej lekcji omówiliśmy najważniejsze kwestie związane z zabezpieczaniem usług internetowych w Rust:

  • Różnicę między uwierzytelnianiem (potwierdzeniem tożsamości) a autoryzacją (określeniem dozwolonych działań).
  • Znaczenie ochrony punktów końcowych API.
  • Działanie JSON Web Tokens (JWT) w bezstanowym uwierzytelnianiu, w tym ich strukturę.
  • Praktyczny przykład generowania i weryfikowania JWT w Rust.
  • Pojęcia kontroli dostępu opartej na rolach oraz wykorzystanie middleware do implementowania kontroli autoryzacji.

Teraz są Państwo gotowi do tworzenia bezpieczniejszych i bardziej niezawodnych aplikacji w Rust!

Często zadawane pytania

Czy lekcja „Uwierzytelnianie i autoryzacja” jest bezpłatna?

Tak — pełny tekst „Uwierzytelnianie i autoryzacja” 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 Learn Rust Coding, przejdź na CoddyKit PRO. Kurs Learn Rust Coding zawiera 3 lekcji w sumie.

Co nauczysz się w „Uwierzytelnianie i autoryzacja”?

Zaimplementują Państwo bezpieczne uwierzytelnianie użytkowników (np. JWT) oraz mechanizmy autoryzacji chroniące endpointy usługi webowej. Ćwiczysz Learn Rust Coding 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ąć Learn Rust Coding?

Nie wymagamy żadnego doświadczenia. Learn Rust Coding 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 3 z 3.

Ile czasu zajmuje lekcja „Uwierzytelnianie i autoryzacja”?

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 Learn Rust Coding?

Tak. Każda lekcja Learn Rust Coding 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. REST API z Actix-web/Rocket
  2. Integracja z bazami danych (SQLx/Diesel)
  3. Uwierzytelnianie i autoryzacja
← Powrót do Learn Rust Coding