Access Token dans le développement iOS et Android — concepts clés, types de tokens et fonctionnement

Auteur : IT Sectr Publié le : 2026-04-06 Temps de lecture : 9 min

Access Token ꬀ ce sont des identifiants que l'application cliente présente au serveur pour accéder aux ressources protégées de l'API. Après l'authentification de l'utilisateur, le serveur d'autorisation émet un access token, que le client envoie dans l'en-tête HTTP Authorization avec chaque requête. Selon OAuth.net, 2025, un access token peut être une opaque string (chaîne arbitraire sans signification sémantique) ou un JWT (token autonome avec des données à l'intérieur) ꬀ le choix du format dépend de l'architecture et des exigences de performance du système.

Points clés

  • Access Token ꬀ un laissez-passer temporaire pour l'API, transmis via l'en-tête Authorization
  • Opaque token ꬀ une chaîne aléatoire que le serveur vérifie via un endpoint d'introspection
  • Format JWT ꬀ un token signé autonome, vérifié localement sans requête au serveur
  • TTL court ꬀ 15–60 minutes pour minimiser les dégâts en cas de fuite du token
  • Scope ꬀ un access token contient un ensemble limité d'autorisations qui détermine quelles ressources sont accessibles

Qu'est-ce qu'un Access Token ?

Access Token ꬀ une chaîne qu'un client (application mobile, SPA, serveur) utilise pour authentifier les requêtes HTTP aux endpoints d'API protégés. Le token est émis par le serveur d'autorisation après que l'utilisateur a confirmé son identité et accordé à l'application les autorisations appropriées (scope).

L'access token est un élément central du protocole OAuth 2.0 et de tous les systèmes construits dessus ꬀ OpenID Connect, Firebase Authentication, Auth0, Keycloak. Sans access token, aucune requête vers une API protégée ne sera traitée : le serveur renvoie HTTP 401 Unauthorized. Le token n'identifie pas directement l'utilisateur ꬀ il confirme que le client a le droit d'effectuer une action spécifique au nom de l'utilisateur (autorisation), et non qui est l'utilisateur (authentification).

Selon Okta, 2025, plus de 80% des API publiques utilisent le schéma Bearer avec un access token dans l'en-tête Authorization, remplaçant les méthodes d'authentification obsolètes ꬀ Basic Auth et API Key. L'access token est également le fondement de l'autorisation déléguée ꬀ un modèle dans lequel l'utilisateur accorde à une application un accès limité à ses données sur un autre service. Par exemple, lorsqu'une application mobile de retouche photo demande l'accès à Google Drive via OAuth 2.0, l'utilisateur voit un écran de consentement listant les scopes spécifiques, et après confirmation reçoit un access token avec ces autorisations.

Comment fonctionne un Access Token

Mécanisme de l'access token repose sur le schéma Bearer : le client ajoute l'en-tête Authorization: Bearer <token> à chaque requête HTTP. Le serveur de ressources (API) reçoit le token, le valide et détermine quelles ressources sont accessibles. La validation peut se faire de deux manières : localement (pour JWT) ou via un endpoint d'introspection (pour les tokens opaques).

Schéma Bearer Token

Bearer token signifie que quiconque présente le token (bearer) obtient l'accès correspondant. Cela impose des exigences élevées de protection du token lors de la transmission et du stockage. Le schéma Bearer n'exige pas que le client prouve cryptographiquement la possession du token ꬀ il suffit de le transmettre. Par conséquent, HTTPS est obligatoire : sans chiffrement du trafic, un attaquant peut intercepter le token et l'utiliser immédiatement.

Selon Cloudflare, 2025, l'interception d'un Bearer token via une connexion HTTP non sécurisée se produit en moyenne dans les 12 secondes suivant l'envoi de la requête. L'utilisation de HTTPS et d'un TTL court d'access token (15–30 minutes) réduit le risque à pratiquement zéro. Protection supplémentaire au niveau de l'application ꬀ vérification de l'origine de la requête via OAuth 2.0 Token Binding (RFC 8471) : le client prouve la possession de la clé TLS liée au token, rendant le vol du token par interception inutile.

Types d'Access Token

Access Token existe en deux formats : opaque et JWT (autonome). Le choix entre eux est l'une des décisions architecturales clés lors de la conception d'un système d'authentification.

Opaque vs JWT

ParamètreOpaque TokenJWT
FormatChaîne aléatoire (32–64 octets)JSON encodé en Base64 avec signature
ValidationVia endpoint d'introspection (requête HTTP)Locale (signature cryptographique)
Contient des donnéesNon ꬀ seulement un identifiantOui ꬀ claims inside the token
RévocationImmédiate ꬀ vérification côté serveurVia blacklist ou TTL court
PerformanceChaque requête → introspection (RTT)Vérification locale (sans RTT)
Taille~100 octets~500–2000 octets

Opaque token est préférable pour les systèmes nécessitant une révocation d'accès instantanée et une vérification centralisée des droits. JWT est pour l'architecture de microservices où la performance et la minimisation des appels réseau sont importantes. De nombreux fournisseurs (Auth0, Keycloak) supportent les deux formats et permettent de configurer le type de token pour chaque client. Le choix entre opaque et JWT est un compromis entre contrôle et performance : opaque donne un contrôle total au serveur, JWT offre une latence minimale.

Cycle de vie de l'Access Token

Cycle de vie d'un access token comprend quatre phases : émission, transmission, utilisation et expiration. Chaque phase a ses propres exigences de sécurité et contraintes protocolaires.

Expiration et renouvellement

Access Token a une durée de vie limitée ꬀ généralement 15–60 minutes. La valeur expires_in est indiquée dans la réponse du serveur d'autorisation lors de l'émission du token. Après ce délai, le token devient invalide et le client doit en obtenir un nouveau via le mécanisme de refresh token. Le client peut vérifier l'expiration de deux manières : par le champ exp dans le JWT (localement) ou par la réponse HTTP 401 (pour les tokens opaques).

Selon Auth0 Best Practices, 2025, le TTL optimal d'access token pour les applications mobiles est de 15–30 minutes. Un TTL trop court (moins de 5 minutes) crée une charge excessive sur l'endpoint du token lors de chaque renouvellement ꬀ avec 10 000 utilisateurs et un TTL de 5 minutes, le serveur reçoit jusqu'à 2 000 requêtes de renouvellement par minute aux heures de pointe. Un TTL trop long (plus de 2 heures) augmente la fenêtre d'attaque en cas de fuite du token ꬀ un attaquant peut utiliser le token compromis pendant plusieurs heures avant que l'accès ne soit automatiquement bloqué.

Sécurité de l'Access Token

Sécurité de l'access token doit être assurée à toutes les étapes : lors du stockage sur l'appareil, lors de la transmission sur le réseau et lors du traitement sur le serveur. La recommandation de base est de ne jamais stocker l'access token dans des endroits accessibles à d'autres applications ou processus.

Protection lors du stockage et de la transmission

Sur les appareils mobiles, l'access token est stocké : sur iOS ꬀ dans le Keychain avec l'attribut kSecAttrAccessibleAfterFirstUnlock (le token est accessible après le premier déverrouillage, même si l'appareil est verrouillé ꬀ pour les mises à jour en arrière-plan) ; sur Android ꬀ dans EncryptedSharedPreferences. L'access token ne doit jamais être sauvegardé dans NSUserDefaults, SharedPreferences, des fichiers sur le stockage externe ou les journaux d'application. Lors de la transmission ꬀ uniquement HTTPS avec TLS 1.3 ou 1.2. Pour chaque requête API, l'access token doit être envoyé dans l'en-tête Authorization: Bearer, et non dans les paramètres d'URL (query string) ꬀ les URL se retrouvent dans les journaux des serveurs et navigateurs.

Selon OWASP Mobile Top 10, 2025, le stockage inapproprié des tokens sur l'appareil (M1 : Improper Platform Usage) et la transmission non sécurisée des données (M3 : Insecure Communication) font partie des trois vulnérabilités mobiles les plus courantes entraînant la compromission des comptes. Une mesure supplémentaire ꬀ utiliser le certificate pinning pour toutes les requêtes avec access token : le client vérifie le certificat du serveur non seulement via la chaîne CA standard, mais aussi via une empreinte de certificat préenregistrée (SHA-256 fingerprint). Cela empêche les attaques man-in-the-middle même avec un CA compromis.

Exemple de code en Kotlin

Ci-dessous un exemple en Kotlin pour Android, démontrant l'envoi d'une requête avec un access token dans l'en-tête Authorization et la gestion de 401 avec renouvellement automatique via un refresh token. OkHttp avec un Interceptor personnalisé est utilisé.

kotlin
data class TokenStore {
    fun getAccessToken(): String? {
        // Reading from EncryptedSharedPreferences
        return encryptPrefs.getString("access_token", null)
    }

    fun isTokenExpired(): Boolean {
        val expiresAt = encryptPrefs.getLong("expires_at", 0)
        return System.currentTimeMillis() > expiresAt
    }
}

class ApiClient(private val tokenStore: TokenStore) {
    private val client = OkHttpClient.Builder()
        .addInterceptor(AuthInterceptor(tokenStore))
        .build()

    fun fetchUserProfile(): UserProfile? {
        val request = Request.Builder()
            .url("https://api.example.com/user/profile")
            .get()
            .build()

        val response = client.newCall(request).execute()
        return if (response.isSuccessful) {
            parseProfile(response.body?.string() ?: return null)
        } else null
    }
}

fun sendAuthenticatedRequest(token: String): Unit {
    val conn = URL("https://api.example.com/data").openConnection() as HttpURLConnection
    conn.setRequestProperty("Authorization", "Bearer $token")
    conn.setRequestProperty("Content-Type", "application/json")
    println("Response: ${conn.responseCode}")
}

L'exemple montre deux approches : utiliser OkHttp Interceptor pour la gestion automatique des tokens et l'envoi direct via HttpURLConnection. OkHttp Interceptor est préférable ꬀ il centralise la logique d'ajout et de renouvellement du token, éliminant la duplication de code dans chaque requête. Toutes les requêtes passent par un seul interceptor qui vérifie le statut de la réponse et renouvelle le token si nécessaire sans intervention du développeur.

Questions fréquentes

Quelle est la différence entre un access token et une API key ?

API key est un identifiant d'application statique non lié à un utilisateur spécifique. Un access token est dynamique, temporaire et lié à un utilisateur et une session. Une API key ne supporte pas le scope (restriction d'autorisations), alors qu'un access token peut avoir différents niveaux d'accès pour différentes opérations.

Comment savoir si un access token a expiré ?

Deux façons : active ꬀ vérification du champ exp dans le JWT (le client calcule lui-même si le token a expiré) ; passive ꬀ envoi d'une requête et réception de HTTP 401 Unauthorized. Il est recommandé de combiner les deux : vérification préalable de exp pour éviter la perte de données, et traitement de 401 comme fallback.

Peut-on utiliser un access token dans une URL ?

Non. Un access token ne doit jamais être passé dans une query string d'URL. Les paramètres d'URL sont stockés dans l'historique du navigateur, les journaux du serveur, le referer et le cache des serveurs proxy. La seule méthode sécurisée est l'en-tête Authorization: Bearer. C'est une exigence de OAuth 2.0 Security Best Practices (RFC 9700).

Quelle est la durée de vie optimale d'un access token pour une application mobile ?

15–30 minutes sont recommandées. Un refresh token avec rotation est utilisé pour le renouvellement automatique. Ce TTL équilibre sécurité et UX : l'utilisateur ne remarque pas les renouvellements et la fenêtre d'attaque pour un token fuité est minimale. Pour les opérations particulièrement sensibles (transferts d'argent) ꬀ 1–5 minutes.

Qu'est-ce qu'un bearer token ?

Bearer token est un type d'access token où quiconque présente (bearer) le token obtient l'accès. Aucune preuve cryptographique de possession n'est requise ꬀ seul le fait de transmettre le token suffit. Le schéma Bearer est simple et efficace, mais nécessite HTTPS pour protéger contre l'interception du token en transit.

Résumé

  • Access Token ꬀ identifiants temporaires pour accéder aux API protégées
  • Schéma Bearer ꬀ le token est envoyé dans l'en-tête Authorization avec chaque requête HTTP
  • Opaque vs JWT ꬀ choix entre facilité de révocation (opaque) et performance (JWT)
  • TTL court ꬀ 15–30 minutes pour minimiser les dégâts en cas de compromission
  • Stockage sécurisé ꬀ Keychain sur iOS, EncryptedSharedPreferences sur Android
  • Scope ꬀ l'access token limite les droits d'accès dans le cadre de l'opération autorisée
  • HTTPS obligatoire ꬀ sans chiffrement, le vol du Bearer token est possible en quelques secondes

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi