Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :
Locataires externes (en savoir plus)
Lorsque votre application mobile inclut des fonctionnalités web telles qu’une page de mise à jour de profil ou un tableau de bord de récompenses, les utilisateurs s’attendent à une expérience d’authentification unique transparente. Ils ne doivent pas rencontrer une deuxième invite de connexion après la connexion via l’application native.
Cet article explique comment implémenter l’authentification unique (SSO) entre une application mobile native et une ressource web hébergée dans une vue web incorporée (par exemple, WKWebView sur iOS ou WebView sur Android). Contrairement aux navigateurs système, les vues web incorporées vous permettent de manipuler les requêtes réseau avant leur envoi. Cette fonctionnalité permet à votre application d’injecter l’état d’authentification de l’utilisateur directement dans les en-têtes de requête.
Le flux recommandé fonctionne comme suit :
- L’utilisateur se connecte via l’interface utilisateur native de l’application mobile à l’aide du SDK d’authentification native ou de l’API d’authentification native.
- Avant de charger la vue web, l’application récupère un jeton d’accès valide à partir du Kit de développement logiciel (SDK) ou de l’API.
- L’application charge la vue web avec une demande personnalisée qui inclut le jeton d’accès dans l’en-tête
Authorization: Bearer <access_token>. - La ressource web valide le jeton et accorde immédiatement l’accès.
Le diagramme suivant montre l’interaction entre la ressource web, l’application mobile, le SDK et le service d’identité (ESTS) :
Prerequisites
- Application mobile avec authentification native configurée à l’aide du KIT SDK d’authentification native ou de l’API d’authentification native. Si vous utilisez le Kit de développement logiciel (SDK) et que vous n’avez pas encore configuré votre application, consultez Préparer votre application Android pour l’authentification native ou Préparer votre application iOS/macOS pour l’authentification native.
- Flux de connexion terminé dans votre application native. Pour obtenir des conseils, consultez Connecter des utilisateurs dans une application mobile Android ou Connecter des utilisateurs dans une application mobile iOS.
- Ressource web servie via HTTPS (TLS). N’envoyez pas de jetons via HTTP.
- Une identité cliente partagée (ID d’application) entre l’application mobile et la ressource web. Pour plus d’informations, consultez Limitations et configuration requises.
Se connecter avec l’authentification native
Terminez le flux de connexion standard à l’aide du Kit de développement logiciel (SDK) d’authentification native ou de l’API d’authentification native. Lorsque la connexion réussit à utiliser le Kit de développement logiciel (SDK), elle met en cache le jeton d’accès, le jeton d’ID et le jeton d’actualisation en toute sécurité. Si vous utilisez directement l’API, votre application est chargée de stocker en toute sécurité les jetons qu’elle reçoit.
Pour obtenir des instructions détaillées d’implémentation de connexion, consultez :
- Android : Connecter des utilisateurs dans une application mobile Android (Kotlin)
- iOS/macOS : Connecter des utilisateurs dans une application mobile iOS (Swift)
Récupérer le jeton d’accès
Lorsque l’utilisateur déclenche l’action pour ouvrir la vue web, vérifiez que l’application dispose d’un jeton d’accès valide et non expiré avant de charger la ressource web.
Si vous utilisez le Kit de développement logiciel (SDK) d’authentification native, demandez un jeton en mode silencieux. Le Kit de développement logiciel (SDK) fournit une getAccessToken() méthode qui récupère un jeton valide à partir du cache ou l’actualise silencieusement. Pour plus d’informations sur l’acquisition de jetons d’accès avec des périmètres spécifiques, consultez :
- Android : Acquérir plusieurs jetons d’accès
- iOS/macOS : Acquérir plusieurs jetons d’accès
Si vous utilisez directement l’API d’authentification native, votre application récupère des jetons via le point de terminaison de l’API /oauth/v2.0/token . Pour plus d’informations, consultez la référence de l’API d’authentification native.
Demandez le jeton avec les périmètres exacts requis par la ressource web. Pour connaître les exigences relatives à l’étendue, consultez Limitations et exigences de configuration.
Charger l’affichage web avec l’authentification
Il existe deux méthodes pour passer l’état d’authentification à l’affichage web. L’approche recommandée utilise des en-têtes d’autorisation. Un secours basé sur les cookies est disponible pour les scénarios hérités, mais il est déconseillé.
Option A: Utiliser un jeton porteur via l’en-tête HTTP (recommandé)
Injectez le jeton d’accès directement dans l’en-tête Authorization de la requête HTTP initiale utilisée pour charger la vue web. Il s’agit de la méthode la plus sécurisée et la plus robuste.
Cette approche est préférée, car elle :
- Est sans état : il ne s’appuie pas sur les cookies persistants côté client.
- Isole le jeton : il limite strictement le jeton à ce flux de requête spécifique.
- Évite les vecteurs d’attaque basés sur le web : il évite les problèmes de sécurité courants associés aux sessions gérées par le navigateur.
Pour charger l’affichage web avec l’authentification basée sur l’en-tête :
- Construisez l’URL de la ressource web. Vérifiez qu’il utilise HTTPS.
- Créez un objet de requête réseau personnalisé.
- Ajoutez l’en-tête
Authorization: Bearer <access_token>à la requête. - Chargez la requête dans le composant d’affichage web (par exemple,
WKWebViewsur iOS ouWebViewsur Android).
Option B : Utiliser des cookies (solution de repli uniquement)
Si la ressource web cible ne peut pas gérer l'authentification basée sur l'en-tête (par exemple, certaines applications anciennes à une seule page), vous pouvez injecter le jeton sous forme de cookie. Cette approche est généralement déconseillée en raison des risques de sécurité.
L’injection de cookies dans une vue web confie l’état d’authentification à un mécanisme géré par le navigateur. Cela rend la session « ambiante » (automatiquement attachée aux requêtes), qui expose l’application aux classes d’attaque web standard :
- XSS (script intersites) : la session est vulnérable au détournement si le contenu web est compromis.
- CSRF (falsification de demande intersite) : il existe un risque de demandes authentifiées involontaires.
- Fixation de session : un attaquant peut contrôler l’état de la session.
- Conformité : cette approche est en conflit avec les meilleures pratiques de sécurité (par exemple, MASTG-KNOW-0018) concernant la persistance de l’état sensible dans les jars de cookies d’affichage web.
Avertissement
L’approche basée sur les cookies est approuvée de manière conditionnelle et généralement déconseillée. Utilisez-la uniquement lorsque la ressource web cible ne peut pas prendre en charge l’authentification basée sur l’en-tête.
Si vous utilisez l’approche basée sur les cookies, ces exigences s’appliquent :
- Utilisez les cookies de session émis par le serveur si possible.
- Évitez de placer des jetons d’accès bruts directement dans des cookies.
- Définissez des cookies avec les attributs
HttpOnly,Secure, etSameSiteappropriés. - Appliquez une protection CSRF stricte côté serveur.
Valider et conserver le jeton sur le back-end
Lorsque la requête atteint la ressource web, le back-end traite le jeton pour établir la session.
Valider le jeton
Le serveur web intercepte les requêtes entrantes et vérifie la signature et les revendications du jeton. Pour ASP.NET back-ends Core, utilisez Microsoft.Identity.Web (MISE) pour gérer la validation automatiquement.
Vérifiez que la revendication de l’audience (aud) du jeton correspond à l’identificateur de l’API web et à la revendication de l’émetteur (iss) correspond à l’autorité attendue.
Conserver la session
La vue web ne conserve pas les en-têtes personnalisés sur les événements de navigation suivants (par exemple, lorsque l’utilisateur sélectionne un lien). Pour maintenir l’état authentifié après la demande initiale, le serveur émet un cookie de session standard (Set-Cookie) lors de la validation réussie du jeton du porteur initial.
Configurez le cookie de session avec les attributs suivants :
HttpOnlySecure- Une stratégie appropriée
SameSite
Limitations et exigences de configuration
Pour vous assurer que le jeton émis pour l’application mobile est accepté par la ressource web, gardez à l’esprit les configurations suivantes :
- Identité du client partagé : l’application mobile et l’application web doivent partager le même ID client (ID d’application). S’ils ont des ID différents, le back-end rejette le jeton de l’application mobile en raison d'une incompatibilité d’audience.
-
Alignement de l’étendue : la demande de l'application mobile concernant le jeton d'accès inclut les étendues exactes requises par la ressource web (par exemple,
Profile.Read,Orders.Write).
Note
Cette solution est adaptée spécifiquement au scénario d’affichage web. Une solution plus générique qui étend les fonctionnalités d’authentification unique aux navigateurs système et à d’autres scénarios complexes est prévue pour une prochaine version.
Contenu connexe
- Authentification native dans Microsoft Entra External ID
- Repli web d'authentification native
- Informations de référence sur l’API d’authentification native