OAuth 2.0 und JWT-Autorisierung in Swift: Vollständiger Leitfaden für Anfänger

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

Einleitung: Warum ist Autorisierung in mobilen Apps notwendig?

Moderne iOS-Apps arbeiten selten isoliert. Sie kommunizieren mit Servern, senden Daten, erhalten personalisierte Inhalte. Aber wie kann der Server erkennen, dass die Anfrage tatsächlich von dem Benutzer stammt, der er vorgibt zu sein? Hier kommen OAuth 2.0 und JWT (JSON Web Token) ins Spiel. Dies sind nicht nur modische Abkürzungen, sondern Sicherheitsstandards, die der Funktionsweise der meisten modernen APIs (Google, Facebook, GitHub, Ihr eigenes Backend) zugrunde liegen.

In diesem Artikel werden wir untersuchen, wie OAuth 2.0 und JWT in Swift funktionieren. Sie erfahren, worin sie sich unterscheiden, wie man sie richtig implementiert und welche Fallstricke auf Anfänger warten. Wir werden Code zum Abrufen, Speichern und Aktualisieren von Token schreiben. Los geht's!



1. Grundlagen: OAuth 2.0 und JWT – worin liegt der Unterschied?

Viele verwechseln diese beiden Konzepte. Tatsächlich handelt es sich um unterschiedliche Abstraktionsebenen.

  • OAuth 2.0 ist ein Autorisierungsprotokoll. Es beschreibt, wie eine App (Client) auf die Ressourcen eines Benutzers auf einem Drittanbieter-Server (z. B. auf seine Fotos bei Google) zugreifen kann, ohne Login und Passwort zu übertragen. Die Hauptidee ist die Ausgabe temporärer Zugriffstoken.
  • JWT ist ein Token-Format. Es ist ein kompakter, URL-sicherer String, der JSON-Daten (z. B. Benutzer-ID, Rolle, Gültigkeitsdauer) und eine Signatur enthält. JWT wird häufig als Access Token in OAuth 2.0 verwendet, kann aber auch separat eingesetzt werden.

Eine einfache Analogie: OAuth 2.0 sind die Regeln für die Ausstellung eines Stadionausweises, und JWT ist der Plastikausweis selbst mit Ihrem Foto und Stempel.

In einem typischen Szenario einer iOS-App:

  1. Öffnet einen Browser für die Anmeldung über einen OAuth-Anbieter (Google, Apple ID, eigener Server).
  2. Erhält einen Authorization Code.
  3. Tauscht den Code gegen einen Access Token (oft im JWT-Format) und einen Refresh Token ein.
  4. Verwendet den Access Token für API-Anfragen.
  5. Wenn der Access Token abläuft, verwendet er den Refresh Token, um einen neuen zu erhalten.


2. Struktur eines JWT-Tokens

Ein JWT besteht aus drei Teilen, die durch Punkte getrennt sind:

header.payload.signature

Beispiel eines dekodierten JWT:

// Header (Kopfzeile){  "alg": "HS256",  "typ": "JWT"}// Payload (Nutzlast){  "sub": "1234567890",  "name": "Ivan Petrov",  "iat": 1516239022,  "exp": 1516242622}// Signature (Signatur) - wird vom Server erstellt

Wichtig: Der Payload eines JWT ist nicht verschlüsselt, er ist nur Base64-kodiert. Jeder kann ihn lesen. Die Geheimhaltung wird durch die Signatur gewährleistet – wenn der Server sieht, dass die Signatur nicht übereinstimmt, lehnt er das Token ab. Speichern Sie daher niemals Passwörter oder geheime Daten in einem JWT.



3. Implementierung von OAuth 2.0 und JWT in Swift

Kommen wir nun zur Praxis. Wir werden eine Klasse für die Arbeit mit der Autorisierung schreiben. Der Einfachheit halber verwenden wir die eingebaute URLSession, obwohl in realen Projekten oft Alamofire oder SwiftUI + async/await verwendet werden.



3.1. Datenmodelle

struct AuthResponse: Codable {    let accessToken: String    let refreshToken: String?    let expiresIn: Int        enum CodingKeys: String, CodingKey {        case accessToken = "access_token"        case refreshToken = "refresh_token"        case expiresIn = "expires_in"    }}

struct UserProfile: Codable { let id: String let name: String let email: String}


3.2. Autorisierungsdienst

Erstellen wir eine Klasse AuthService, die für das Abrufen und Aktualisieren von Token zuständig ist. Beachten Sie: In einer echten App sollten URL und clientSecret sicher gespeichert werden (z. B. im Keychain oder über einen Konfigurationsserver).

class AuthService {    static let shared = A                

Blogs

Buchempfehlungen