JWT-Token in Swift: Arbeiten mit JSON Web Token auf iOS/macOS

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

JWT-Token in Swift (iOS/macOS): Vollständige Anleitung

\n\n

JSON Web Token (JWT) ist ein offener Standard (RFC 7519) zur Erstellung von Zugriffstoken auf Basis von JSON. JWT wird häufig für die Authentifizierung und den Informationsaustausch zwischen Client und Server verwendet. Im Apple-Ökosystem (iOS, macOS, watchOS, tvOS) wird die Arbeit mit JWT bei der Entwicklung von Anwendungen, die mit REST-APIs, Microservices oder anderen Systemen interagieren, die eine sichere Datenübertragung erfordern, zunehmend wichtiger.

\n\n

Dieser Artikel widmet sich der Bibliothek SwiftJWT – der beliebtesten und aktiv gepflegten Lösung für die Arbeit mit JWT in Swift. Wir behandeln die Installation, grundlegende Operationen (Erstellung, Signatur, Verifizierung) sowie fortgeschrittene Anwendungsszenarien.

\n\n

Was ist SwiftJWT?

\n\n

SwiftJWT ist eine leichtgewichtige, native Bibliothek für Swift, die Folgendes ermöglicht:

\n
    \n
  • Erstellung von JWT mit beliebigen Claims (Behauptungen)
  • \n
  • Signieren von Token mit den Algorithmen: HS256, HS384, HS512 (symmetrisch) und RS256, RS384, RS512 (asymmetrisch, auf Basis von RSA)
  • \n
  • Verifizierung der Signatur und der Gültigkeitsdauer des Tokens
  • \n
  • Dekodierung des Payloads ohne Signaturprüfung (z. B. zur Anzeige von Informationen auf dem Client)
  • \n
  • Arbeit mit benutzerdefinierten Daten und Standardfeldern (iss, sub, exp, iat usw.)
  • \n
\n\n

Die Bibliothek ist vollständig in Swift geschrieben, benötigt keine externen Abhängigkeiten (außer Foundation und Security) und ist kompatibel mit Swift Package Manager (SPM), CocoaPods und Carthage.

\n\n

Installation über Swift Package Manager

\n\n

Fügen Sie das Paket über Xcode oder direkt in Package.swift zu Ihrem Projekt hinzu:

\n\n
// Package.swift\ndependencies: [\n    .package(url: "https://github.com/Kitura/Swift-JWT.git", from: "4.0.0")\n],\ntargets: [\n    .target(name: "YourTarget", dependencies: ["SwiftJWT"])\n]\n
\n\n

Grundlegende Operationen mit JWT

\n\n

1. Erstellung und Signatur eines Tokens (HS256)

\n\n

Der einfachste Fall – die Erstellung eines Tokens mit einem symmetrischen Schlüssel:

\n\n
import SwiftJWT\n\n// 1. Definiere die Claims-Struktur\nstruct MyClaims: Claims {\n    let iss: String\n    let sub: String\n    let exp: Date\n    let admin: Bool\n    let customData: String\n}\n\n// 2. Erstelle eine Instanz von Claims\nlet claims = MyClaims(\n    iss: "com.yourcompany.app",\n    sub: "user123",\n    exp: Date(timeIntervalSinceNow: 3600), // +1 Stunde\n    admin: true,\n    customData: "some_value"\n)\n\n// 3. Definiere den Schlüssel (für HS256 – beliebige Zeichenkette)\nlet secretKey = "your-256-bit-secret".data(using: .utf8)!\n\n// 4. Erstelle JWT\nvar jwt = JWT(claims: claims)\nlet signedJWT = try jwt.sign(using: .hs256(key: secretKey))\nprint("Erstellter Token:\\n\\(signedJWT)")\n
\n\n

2. Verifizierung und Dekodierung eines Tokens

\n\n
// Verifizierung mit Prüfung von Signatur und Gültigkeitsdauer\nlet receivedToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."\n\ndo {\n    // Verifiziere und dekodiere\n    let verifiedJWT = try JWT<MyClaims>.verify(token: receivedToken, using: .hs256(key: secretKey))\n    print("Token ist gültig. Claims: \\(verifiedJWT.claims)")\n    \n    // Prüfe bestimmte Felder\n    if verifiedJWT.claims.admin {\n        print("Benutzer ist Administrator")\n    }\n} catch {\n    print("Verifizierungsfehler: \\(error)")\n    // Mögliche Fehler: expiredToken, invalidSignature, malformedToken\n}\n\n// Dekodierung ohne Verifizierung (nur zum Lesen der Daten)\nif let payload = try? JWTDecoder().decodePayload(from: receivedToken) {\n    print("Payload (ohne Prüfung): \\(payload)")\n}\n
\n\n

3. Arbeiten mit asymmetrischen Schlüsseln (RS256)

\n\n

Für Produktionsumgebungen wird die Verwendung asymmetrischer Verschlüsselung (RSA) empfohlen. Der Server signiert das Token mit einem privaten Schlüssel, der Client verifiziert es mit dem öffentlichen Schlüssel:

\n\n
//                    

Empfehlungen