Trousseau iCloud et remplissage automatique des mots de passe
Le trousseau iCloud (“iCloud Keychain”, introduit en 2013) est une fonctionnalité de gestionnaire de mot de passe commune à macOS et iOS ayant la particularité de stocker ses données dans le compte iCloud de l’utilisateur, sécurisé grâce à son Apple ID. Les mots de passe enregistrés sont synchronisés de façon transparente entre tous les appareils de l’utilisateur, et leur utilisation est systématiquement contrainte à une vérification biométrique préalable, fournie automatiquement par le système.
Au fil du temps, de nouvelles fonctionnalités y ont été ajoutées, comme la mémorisation des cartes bleues, le remplissage automatique des codes 2FA, ou l’aide à la création de mots de passe robustes. Le trousseau iCloud est aussi un élément central de la nouvelle fonctionnalité PassKeys, qui sera disponible plus tard cette année, et qui vise à remplacer les mots de passe par un nouveau système de clés plus sécurisé.
Il est très facile pour une application iOS d’utiliser le trousseau iCloud afin de permettre à l’utilisateur de se connecter de façon quasi transparente à votre application.
Les prérequis
- Le trousseau iCloud est disponible à partir d’iOS 12 — soit virtuellement 100% des appareils iOS en 2022.
- La fonctionnalité est désactivable par l’utilisateur dans Réglages ? Mots de passe ? Options.
Intégration pas-à-pas
1. Association du domaine
Pour que la fonctionnalité de remplissage automatique de l’identifiant et du mot de passe soit reconnue dans votre app, vous devez déclarer un domaine associé (associated domain) dans l’app ainsi que sur votre serveur web. Si votre app supporte les Universal Links, vous en avez déjà un !
- Créez un fichier nommé
apple-app-site-associationsans extension - Ajoutez la représentation JSON des identifiants d'applications associés à votre domaine en utilisant le format suivant :
<Team Identifier>.<Bundle Identifier>
{
// Si vous avez déjà des Universal Links
"applinks": {
"apps": [...],
"details": [...]
},
// Section à rajouter pour le trousseau iCloud
"webcredentials": {
"apps": [ "543210XYZX.com.example.app" ]
}
}
- Après avoir créé le fichier
apple-app-site-association, déposez-le à la racine de votre serveur Web ou dans le sous-dossier.well-known. Le fichier doit être accessible via HTTPS sans aucune redirection à l'adresse suivantehttps://<domain>/apple-app-site-associationouhttps://<domain>/.well-known/apple-app-site-associationet être servi avec un headerContent-Type: application/json. Vous pouvez vous aider du validateur branch.io pour vérifier que votre fichier AASA est correctement rédigé et hébergé. - Ajoutez l'entitlement
com.apple.developer.associated-domainsà votre application.- Allez dans l'onglet Capabilities du projet et activez les Associated Domains. Cette étape ajoute le
Associated Domains Entitlementà votre application ainsi que la fonctionnalité desAssociated Domainsà votre ID d'application. - Dans la section Associated Domains, ajoutez le domaine associé à votre application, sous la forme
webcredentials:example.com
- Allez dans l'onglet Capabilities du projet et activez les Associated Domains. Cette étape ajoute le

- Lorsque votre app sera installée sur un appareil, elle tentera de télécharger le fichier
apple-app-site-associationà partir des domaines listés dans lesentitlements. Si ce fichier existe et est valide, l’application et le site web seront désormais associés, et le trousseau proposera automatiquement à l’utilisateur les identifiants enregistrés pour votre domaine.
Comment débugger en cas de problème ?
Il est possible de rencontrer des problèmes lors de la mise en place de l’association entre votre application et votre nom de domaine.
Pour cela, ouvrez l’application Console présente sur Mac.

Assurez-vous de cocher dans le menu Action les cases « Inclure les messages d’informations » et « Inclure les messages de débogage ».
Cliquez sur Démarrer la diffusion, et lancez votre application sur simulateur ou sur votre téléphone.
Une fois votre application lancée, filtrez la recherche par le mot-clé swcd, qui est le processus du “Shared Web Credentials Daemon”. Il utilise NSURLSession pour charger le fichier apple-app-site-association.
On pourra voir ainsi les erreurs existantes s’il y en a. Généralement un petit point orange apparaît quand il y en a une. En cliquant sur la ligne, vous aurez toutes les logs en détail.

2. Configuration des formulaires de votre app
C'est la partie facile : le remplissage automatique utilise une méthode heuristique pour déterminer quand l'utilisateur se connecte ou crée de nouveaux mots de passe, et fournit automatiquement la barre de prédictions au-dessus du clavier virtuel.
4 types de champs sont à distinguer, correspondant chacun à une valeur de l’enum UITextContentType :
| Type | Description | UITextContentType |
| Identifiant | L’identifiant de connexion, habituellement l’adresse mail de l’utilisateur | .username |
| Mot de passe | Le mot de passe utilisé pour la connexion, ou le mot de passe actuel dans le cadre d’un changement de mot de passe | .password |
| Nouveau mot de passe | Le nouveau mot de passe, dans le cadre d’un changement de mot de passe | .newPassword |
| Code OTP ou 2FA | Un code d’authentification à facteurs multiples, reçu par SMS ou par mail. | .oneTimeCode |
Selon la technologie que vous utilisez, la configuration des champs de formulaire est simple :
- Avec SwiftUI, il suffit de rajouter le modifier
.textContentType(.username)auxTextFieldde vos formulaires. - Avec UIKit, il s’agit de la propriété
textContentTypedesUITextField.- Dans Interface Builder, ce réglage se retrouve dans la section “Text Input Traits” ? “Content Type”.
- Si votre identifiant utilisateur est une adresse mail, n’oubliez pas de définir
keyboardType = .emailAddresspour faciliter sa saisie. - N’oubliez pas non plus, sur le champ de mot passe, de masquer les caractères avec la propriété
isSecureTextEntry.
Et… c’est tout ! Comme le clavier est géré par iOS (le système) et non par votre app, il n’y a rien de plus à faire. Les frameworks système se parlent entre eux, et la magie opère.
Comment ça marche ?
- Quand l’utilisateur donne le focus à un champ de texte, iOS détermine qu'il s'agit d'un scénario de connexion grâce au
textContentType - Si un domaine associé existe pour votre application, le trousseau iCloud propose automatiquement les identifiants de votre domaine (avec la possibilité d’ouvrir le trousseau pour en choisir un autre si besoin)
- Si aucun identifiant n’existait sur ce domaine, iOS proposera de le mémoriser à l’avenir (et ce, sur tous les appareils de l’utilisateur) ; et dans le cas d’un changement de mot de passe, le nouveau mot de passe sera mémorisé et synchronisé à la place de l’ancien.
Dans un scenario d’authentification à facteurs multiple, si vous utilisez les champs de type .oneTimeCode, iOS pourra automatiquement proposer de remplir le champ à la réception d’un SMS, et ce même sans aller lire le SMS en question.
Et la sécurité ?
Quand le champ de texte reçoit le focus, si iOS détecte qu’un élément du trousseau est utilisable, une vérification biométrique est effectuée automatiquement par le système. Cette sécurité est “gratuite” et ne nécessite aucune ligne de code pour être mise en place, car cela fait partie du mode de sécurisation native du trousseau d’iOS.
La vérification biométrique ne sert qu'à déverrouiller le trousseau : l’utilisateur ne se connecte pas “avec son empreinte digitale” mais bien avec son couple identifiant/mot de passe enregistrés dans iCloud, protégés par la biométrie.
Pour aller plus loin
La documentation de la fonction Password Autofill est disponible sur le site Apple Developer. Les associated domains y sont aussi décrits de façon exhaustive, et le validateur branch.io est très pratique pour aider à l’activation de cette fonctionnalité.
Vous pouvez aussi utiliser Password Autofill sur votre site web pour permettre la même fonctionnalité dans Safari sur iOS.
Les password autofill rules peuvent être utilisées dans votre app (et sur le web) pour définir précisément les règles imposées dans la composition d’un nouveau mot de passe.
