OAuth 2.0 et autorisation JWT en Swift : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction à OAuth 2.0 et JWT en Swift

Les applications mobiles et de bureau modernes en Swift (iOS/macOS) utilisent de plus en plus le protocole OAuth 2.0 et le format JWT (JSON Web Token) pour une autorisation sécurisée. OAuth 2.0 assure un accès délégué aux ressources, tandis que JWT permet de transmettre les données utilisateur de manière compacte et sécurisée. Dans cet article, nous allons voir comment implémenter une chaîne d'autorisation complète en Swift : de l'obtention du token à sa vérification et son renouvellement.

Nous aborderons :

  • Les bases d'OAuth 2.0 : flux (flows) et rôles
  • La structure d'un JWT et son décodage en Swift
  • L'implémentation pratique de l'autorisation avec URLSession
  • Le stockage des tokens dans le trousseau (Keychain) et leur renouvellement


Bases d'OAuth 2.0 pour le développeur Swift

OAuth 2.0 est un protocole d'autorisation qui permet à une application d'obtenir un accès limité aux ressources d'un utilisateur sans transmettre ses identifiants. Dans le contexte des applications Swift, le Authorization Code Flow avec PKCE (Proof Key for Code Exchange) est le plus souvent utilisé pour les applications mobiles.

Composants clés d'OAuth 2.0

  • Resource Owner — l'utilisateur, propriétaire des données
  • Client — votre application Swift
  • Authorization Server — le serveur qui délivre les tokens (ex : Google, Facebook, votre backend)
  • Resource Server — l'API fournissant les données protégées

Un flux typique en Swift se présente ainsi :

  1. L'application ouvre une vue web (SFSafariViewController ou ASWebAuthenticationSession) pour authentifier l'utilisateur.
  2. Après une connexion réussie, le serveur redirige vers une URL de callback avec un code temporaire.
  3. L'application échange le code contre un access token et un refresh token.
  4. L'access token est utilisé pour les requêtes vers l'API, le refresh token pour obtenir un nouvel access token à expiration.


Structure d'un JWT et son décodage en Swift

Un JWT se compose de trois parties séparées par des points : header.payload.signature. Exemple de JWT :

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6Ikl2YW4gUGV0cm92IiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Décodage du payload en Swift (sans vérification de la signature) :

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] }}

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

Pour une vérification complète de la signature JWT côté client, utilisez la bibliothèque SwiftJWT ou JWTDecode, disponibles via Swift Package Manager.



Implémentation d'OAuth 2.0 et JWT en Swift

Étape 1 : Configuration de URLSession et modèles de tokens

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

class AuthService { private let session = URLSession.shared

Blogs

Book Recommendations