JWT-Token in Swift (iOS/macOS): Vollständiger Leitfaden
JSON Web Token (JWT) ist eine kompakte, URL-sichere Methode zur Datenübertragung zwischen Parteien im JSON-Format. Im Apple-Ökosystem (iOS, macOS, watchOS, tvOS) wird JWT häufig für die Benutzerauthentifizierung, den Informationsaustausch zwischen Diensten und die Implementierung von Single Sign-On verwendet. In diesem Artikel werden wir uns ansehen, wie man mit JWT-Token in Swift arbeitet, welche Bibliotheken man verwendet und wie man den gesamten Zyklus von der Erstellung bis zur Verifizierung implementiert.
Was ist JWT und warum wird es in iOS/macOS benötigt?
JWT besteht aus drei Teilen, die durch Punkte getrennt sind:
- Header – der Kopf, der den Tokentyp und den Signaturalgorithmus enthält (z. B. HS256 oder RS256).
- Payload – die Nutzlast mit Daten (Claims), wie Benutzer-ID, Ablaufdatum (exp), Aussteller (iss) und andere.
- Signature – die Signatur, die auf Basis von Header, Payload und einem geheimen Schlüssel (oder einem Schlüsselpaar für asymmetrische Algorithmen) erstellt wird.
In mobilen Apps wird JWT normalerweise verwendet für:
- Speicherung der Benutzersitzung nach dem Login.
- Übertragung von Zugriffsrechten zwischen Client und Server.
- Sicheren Datenaustausch zwischen Microservices.
Beliebte Bibliotheken für die Arbeit mit JWT in Swift
Es gibt mehrere bewährte Bibliotheken, die die Arbeit mit JWT auf Apple-Plattformen vereinfachen:
- Swift-JWT (IBM) – eine der beliebtesten, unterstützt HS256, RS256, ES256 und andere Algorithmen, funktioniert auf iOS, macOS, Linux.
- JWTDecode (Auth0) – eine leichte Bibliothek nur zum Dekodieren und Überprüfen der Signatur (ohne Token-Erstellung).
- Vapor JWT – für die Serverseite in Swift (Vapor), kann aber auch in Client-Projekten verwendet werden.
- Kitura-CredentialsJWT – Teil des Kitura-Ökosystems von IBM.
In diesem Artikel konzentrieren wir uns auf die Bibliothek Swift-JWT, da sie am vielseitigsten und aktiv unterstützt wird.
Installation von Swift-JWT über Swift Package Manager (SPM)
Fügen Sie die Abhängigkeit in der Datei Package.swift oder über Xcode hinzu:
// Package.swiftdependencies: [ .package(url: "https://github.com/Kitura/Swift-JWT.git", from: "4.0.0")],targets: [ .target(name: "YourTarget", dependencies: ["SwiftJWT"])]Oder in Xcode: File → Swift Packages → Add Package Dependency und geben Sie die URL an: https://github.com/Kitura/Swift-JWT.git.
Erstellung eines JWT-Tokens mit einem symmetrischen Schlüssel (HS256)
Betrachten wir ein Beispiel für die Erstellung eines JWT mit dem Algorithmus HS256 (symmetrischer Schlüssel):
import SwiftJWT
// Definieren der Struktur für den Payloadstruct MyClaims: Claims { let sub: String let exp: Date let iss: String let admin: Bool}
// Erstellen der Nutzlastlet claims = MyClaims( sub: "1234567890", exp: Date(timeIntervalSinceNow: 3600), // Token lebt 1 Stunde iss: "pythonlib.ru", admin: true)
// Erstellen des JWT-Objektsvar jwt = JWT(claims: claims)
// Festlegen des Headers (optional, standardmäßig HS256)let header = Header(kid: "my-key-id")jwt.header = header
// Geheimer Schlüssel (in einem echten Projekt im Keychain oder .env speichern)let privateKey = "my-secret-key".data(using: .utf8)!
// Signieren und Token-String erhaltendo { let signedJWT = try jwt.sign(using: .hs256(key: privateKey)) print("Erstellter JWT:\\(signedJWT)")} catch { print("Signaturfehler: \\(error)")}Verifizierung und Dekodierung von JWT
Um die Signatur zu überprüfen und Daten aus dem Token zu extrahieren, verwenden Sie:
let jwtString = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiZXhwIjoxNjg5OTk5OTk5LCJpc3MiOiJweXRob25saWIucnUiLCJhZG1