Autorisierung und Authentifizierung in Rust: Bibliotheken und Werkzeuge

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Autorisierung und Authentifizierung in Rust: vollständiger Überblick über Werkzeuge

Rust ist eine systemnahe Programmiersprache, die zunehmend für die Erstellung hochlastiger Webdienste verwendet wird. Sicherheitsfragen, einschließlich Authentifizierung (Überprüfung der Benutzeridentität) und Autorisierung (Überprüfung der Zugriffsrechte), sind hier besonders kritisch. In diesem Artikel werden wir die wichtigsten Bibliotheken und Ansätze zur Implementierung dieser Mechanismen im Rust-Ökosystem untersuchen.



Grundlegende Ansätze zur Authentifizierung

In Rust-Projekten werden am häufigsten drei Strategien verwendet:

  • Sitzungsbasierte Authentifizierung — der Server speichert den Sitzungszustand (normalerweise in Redis oder im Arbeitsspeicher), der Client erhält ein Cookie mit der Sitzungskennung.
  • JWT (JSON Web Token) — zustandslose Token, die Behauptungen (Claims) enthalten und vom Server signiert werden.
  • OAuth2 / OpenID Connect — dezentrale Authentifizierung über Drittanbieter (Google, GitHub, Yandex).


Wichtige Rust-Bibliotheken



1. jsonwebtoken — Arbeit mit JWT

Die beliebteste Bibliothek zum Erstellen und Verifizieren von JWT-Token. Unterstützt HS256, RS256, ES256 und andere Algorithmen.

use jsonwebtoken::{encode, decode, Header, Validation, EncodingKey, DecodingKey};

// Token erstellenlet claims = serde_json::json!({ "sub": "user123", "exp": 1740000000, "role": "admin"});let token = encode(&Header::default(), &claims, &EncodingKey::from_secret("secret".as_ref())).unwrap();

// Verifizierunglet token_data = decode::<serde_json::Value>( &token, &DecodingKey::from_secret("secret".as_ref()), &Validation::default()).unwrap();println!("Token gehört zu: {}", token_data.claims["sub"]);


2. bcrypt — Passwort-Hashing

Sicheres Hashing mit Salt. Wird zur sicheren Speicherung von Passwörtern in der Datenbank verwendet.

use bcrypt::{hash, verify, DEFAULT_COST};

let password = "super_secret_123";let hashed = hash(password, DEFAULT_COST).unwrap();println!("Hash: {}", hashed);

let valid = verify(password, &hashed).unwrap();println!("Passwort ist korrekt: {}", valid); // true


3. actix-web-identity / actix-web-flash — Sessions für Actix Web

Wenn Sie das Actix Web-Framework verwenden, helfen diese Crates bei der Verwaltung von Sessions über Cookies oder Redis.

use actix_web::{web, App, HttpServer, HttpRequest, HttpResponse, middleware::IdentityService};use actix_web::cookie::Key;

async fn login(req: HttpRequest) -> HttpResponse { let identity = req.extensions().get::<Identity>().unwrap(); identity.remember("user_id=42".to_string()); HttpResponse::Ok().body("Autorisiert")}

#[actix_web::main]async fn main() -> std::io::Result<()> { HttpServer::new(|| { App::new() .wrap(IdentityService::new(Key::from(&[0; 32]))) .route("/login", web::get().to(login)) }) .bind("127.0.0.1:8080")? .run() .await}


4. oauth2 — OAuth2-Client

Bibliothek zur Implementierung von OAuth2-Flows (z. B. "Login with GitHub"). Unterstützt Authorization Code, Client Credentials und Refresh Token.

use oauth2::{basic::BasicClient, AuthUrl, TokenUrl, ClientId, ClientSecret, RedirectUrl};

let client = BasicClient::new( ClientId::new("your_client_id".to_string()), Some(ClientSecret::new("your_client_secret".to_string())), AuthUrl::new("https://github.com/login/oauth/authorize".to_string()).unwrap(), Some(TokenUrl::new("https://github.com/login/oauth/access_token".to_string()).unwrap())).set_redirect_uri(RedirectUrl::new("http://localhost:8080/callback".to_string()).unwrap());


Vergleich der Ansätze

  • JWT — die beste Wahl für Microservices und APIs, benötigt keinen Server

Empfehlungen