Jetons JWT en Swift : guide complet pour travailler avec les JSON Web Tokens

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

Jetons JWT en Swift (iOS/macOS) : guide complet



JSON Web Token (JWT) est un moyen compact et sécurisé pour les URL de transférer des données entre les parties au format JSON. Dans l'écosystème Apple (iOS, macOS, watchOS, tvOS), JWT est largement utilisé pour l'authentification des utilisateurs, l'échange d'informations entre services et la mise en œuvre du Single Sign-On. Dans cet article, nous verrons comment travailler avec les jetons JWT en Swift, quelles bibliothèques utiliser et comment implémenter le cycle complet : de la création à la vérification.



Qu'est-ce que JWT et pourquoi en a-t-on besoin sur iOS/macOS ?



JWT se compose de trois parties séparées par des points :



  • Header — l'en-tête contenant le type de jeton et l'algorithme de signature (par exemple, HS256 ou RS256).
  • Payload — la charge utile avec les données (claims), telles que l'identifiant utilisateur, la date d'expiration (exp), l'émetteur (iss) et autres.
  • Signature — la signature créée à partir de l'en-tête, de la charge utile et de la clé secrète (ou d'une paire de clés pour un algorithme asymétrique).


Dans les applications mobiles, JWT est généralement utilisé pour :

  • Stocker la session utilisateur après la connexion.
  • Transmettre les droits d'accès entre le client et le serveur.
  • Échanger des données de manière sécurisée entre les microservices.


Bibliothèques populaires pour travailler avec JWT en Swift



Il existe plusieurs bibliothèques éprouvées qui simplifient le travail avec JWT sur les plateformes Apple :



  • Swift-JWT (IBM) — l'une des plus populaires, prend en charge HS256, RS256, ES256 et d'autres algorithmes, fonctionne sur iOS, macOS, Linux.
  • JWTDecode (Auth0) — une bibliothèque légère uniquement pour le décodage et la vérification de la signature (sans création de jetons).
  • Vapor JWT — pour le côté serveur en Swift (Vapor), mais peut également être utilisé dans des projets clients.
  • Kitura-CredentialsJWT — fait partie de l'écosystème Kitura d'IBM.


Dans cet article, nous nous concentrerons sur la bibliothèque Swift-JWT, car elle est la plus polyvalente et activement maintenue.



Installation de Swift-JWT via Swift Package Manager (SPM)



Ajoutez la dépendance dans le fichier Package.swift ou via Xcode :



// Package.swiftdependencies: [    .package(url: "https://github.com/Kitura/Swift-JWT.git", from: "4.0.0")],targets: [    .target(name: "YourTarget", dependencies: ["SwiftJWT"])]


Ou dans Xcode : File → Swift Packages → Add Package Dependency et indiquez l'URL : https://github.com/Kitura/Swift-JWT.git.



Création d'un jeton JWT avec une clé symétrique (HS256)



Voyons un exemple de création d'un JWT avec l'algorithme HS256 (clé symétrique) :



import SwiftJWT

// Définir la structure pour le payloadstruct MyClaims: Claims { let sub: String let exp: Date let iss: String let admin: Bool}

// Créer la charge utilelet claims = MyClaims( sub: "1234567890", exp: Date(timeIntervalSinceNow: 3600), // le jeton vit 1 heure iss: "pythonlib.ru", admin: true)

// Créer l'objet JWTvar jwt = JWT(claims: claims)

// Spécifier l'en-tête (optionnel, par défaut HS256)let header = Header(kid: "my-key-id")jwt.header = header

// Clé secrète (dans un projet réel, stockez-la dans Keychain ou .env)let privateKey = "my-secret-key".data(using: .utf8)!

// Signer et obtenir la chaîne du jetondo { let signedJWT = try jwt.sign(using: .hs256(key: privateKey)) print("Jeton créé :\\(signedJWT)")} catch { print("Erreur de signature : \\(error)")}


Vérification et décodage du JWT



Pour vérifier la signature et extraire les données du jeton, utilisez :



let jwtString = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiZXhwIjoxNjg5OTk5OTk5LCJpc3MiOiJweXRob25saWIucnUiLCJhZG1                    

Recommendations