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:
- Odczytuje tożsamość uwierzytelnionego użytkownika (np. z JWT).
- Porównuje jego role lub uprawnienia z wymaganym poziomem dostępu do żądanego punktu końcowego.
- 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
- REST API z Actix-web/Rocket
- Integracja z bazami danych (SQLx/Diesel)
- Uwierzytelnianie i autoryzacja