OAuth 2.0 und JWT-Autorisierung in Swift: Vollständiger Leitfaden

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

Einführung in OAuth 2.0 und JWT in Swift

Moderne mobile und Desktop-Anwendungen in Swift (iOS/macOS) verwenden zunehmend das Protokoll OAuth 2.0 und das Format JWT (JSON Web Token) für sichere Autorisierung. OAuth 2.0 ermöglicht delegierten Zugriff auf Ressourcen, während JWT eine kompakte und sichere Übertragung von Benutzerdaten erlaubt. In diesem Artikel werden wir die vollständige Autorisierungskette in Swift implementieren: vom Token-Erhalt bis zur Überprüfung und Erneuerung.

Wir behandeln:

  • Grundlagen von OAuth 2.0: Abläufe (Flows) und Rollen
  • Struktur von JWT und dessen Dekodierung in Swift
  • Praktische Implementierung der Autorisierung mit URLSession
  • Speicherung von Tokens in der Schlüsselbund (Keychain) und deren Erneuerung


Grundlagen von OAuth 2.0 für Swift-Entwickler

OAuth 2.0 ist ein Autorisierungsprotokoll, das es einer Anwendung ermöglicht, eingeschränkten Zugriff auf Benutzerressourcen zu erhalten, ohne deren Anmeldedaten weiterzugeben. Im Kontext von Swift-Anwendungen wird am häufigsten der Authorization Code Flow mit PKCE (Proof Key for Code Exchange) für mobile Anwendungen verwendet.

Schlüsselkomponenten von OAuth 2.0

  • Resource Owner — der Benutzer, Eigentümer der Daten
  • Client — Ihre Swift-Anwendung
  • Authorization Server — der Server, der Tokens ausstellt (z. B. Google, Facebook, Ihr Backend)
  • Resource Server — die API, die geschützte Daten bereitstellt

Ein typischer Ablauf in Swift sieht so aus:

  1. Die Anwendung öffnet eine Web-Ansicht (SFSafariViewController oder ASWebAuthenticationSession) zur Benutzerauthentifizierung.
  2. Nach erfolgreichem Login leitet der Server auf eine Callback-URL mit einem temporären Code um.
  3. Die Anwendung tauscht den Code gegen einen Access Token und Refresh Token ein.
  4. Der Access Token wird für API-Anfragen verwendet, der Refresh Token zum Erhalten eines neuen Access Tokens bei Ablauf der Gültigkeit.


Struktur von JWT und dessen Dekodierung in Swift

JWT besteht aus drei Teilen, die durch Punkte getrennt sind: header.payload.signature. Beispiel eines JWT:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikl2YW4gUGV0cm92IiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Dekodierung des Payloads in Swift (ohne Signaturprüfung):

import Foundation

struct JWT { static func decodePayload(_ token: String) -> [String: Any]? { let segments = token.components(separatedBy: ".") guard segments.count == 3 else { return nil } var base64 = segments[1] .replacingOccurrences(of: "-", with: "+") .replacingOccurrences(of: "_", with: "/") let length = Double(base64.lengthOfBytes(using: .utf8)) let requiredLength = 4 * ceil(length / 4.0) let padding = Int(requiredLength - length) if padding > 0 { base64 += String(repeating: "=", count: padding) } guard let data = Data(base64Encoded: base64) else { return nil } return try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] }}

// Verwendungif let payload = JWT.decodePayload("your.jwt.token") { print(payload["sub"] ?? "") print(payload["exp"] ?? "")}

Für eine vollständige Signaturprüfung von JWT auf der Client-Seite verwenden Sie die Bibliothek SwiftJWT oder JWTDecode, die über den Swift Package Manager verfügbar sind.



Implementierung von OAuth 2.0 und JWT in Swift

Schritt 1: Einrichtung von URLSession und Token-Modellen

struct AuthToken: Codable {    let accessToken: String    let refreshToken: String?    let expiresIn: Int    let tokenType: String}

class AuthService { private let session = URLSession.shared

Blogs

Buchempfehlungen