Tutoriel : prise en charge du secours web
S’applique à : iOS (Swift) macOS (Swift)
Ce tutoriel montre comment acquérir un jeton via un navigateur où l’authentification native n’est pas suffisante pour terminer le flux utilisateur.
Dans ce tutoriel, vous allez apprendre à :
- Vérifiez l’erreur BrowserRequired.
- Gérer l’erreur BrowserRequired.
Prérequis
- Si vous utilisez iOS, suivez les étapes de connexion d’utilisateurs dans un exemple d’application mobile iOS native.
- Si vous utilisez macOS, suivez les étapes de la procédure Connecter des utilisateurs dans un exemple d’application macOS (Swift) à l’aide de l’authentification native.
Navigateur requis
BrowserRequired
est un mécanisme de secours pour différents scénarios où l’authentification native n’est pas suffisante pour terminer le flux utilisateur.
Pour garantir la stabilité de votre application et éviter l’interruption du flux d’authentification, il est vivement recommandé d’utiliser la méthode acquireToken()
du kit de développement logiciel (SDK) pour poursuivre le flux dans le navigateur.
Lorsque nous initialisons le kit de développement logiciel, nous devons spécifier les types de défis que notre application peut prendre en charge. Voici la liste des types de défis acceptés par le kit de développement logiciel :
- OOB (hors bande) : ajoutez ce type de défi lorsque votre application iOS/macOS peut gérer un code secret à usage unique, dans ce cas un code envoyé par e-mail.
- Mot de passe : ajoutez ce type de défi lorsque votre application est en mesure de gérer l’authentification par mot de passe.
Lorsque Microsoft Entra nécessite des fonctionnalités que le client ne peut pas fournir l’erreur BrowserRequired
sera retournée. Par exemple, supposons que nous initialisons l’instance du Kit de développement logiciel (SDK) spécifiant uniquement le type de défi OOB, mais dans le centre d’administration Microsoft Entra, l’application est configurée avec un flux d’utilisateur E-mail avec mot de passe. Lorsque nous appelons la méthode signUp(username) à partir de l’instance du Kit de développement logiciel (SDK), nous obtenons une erreur BrowserRequired
, car Microsoft Entra nécessite un type de défi différent (mot de passe dans ce cas) que celui configuré dans le Kit de développement logiciel (SDK).
Le type de défi insuffisant n’est qu’un exemple de cas où BrowserRequired
peut se produire. BrowserRequired
est un mécanisme de secours général qui peut se produire dans différents scénarios.
Échantillon de flux
Dans l’extrait de code suivant, vous pouvez voir comment spécifier les types de défis lors de l’initialisation de l’instance du SDK :
nativeAuth = try MSALNativeAuthPublicClientApplication(
clientId: "<client id>",
tenantSubdomain: "<tenant subdomain>",
challengeTypes: [.OOB]
)
Dans ce cas, nous ne spécifions que le type de défi OOB. Supposons que dans le centre d’administration Microsoft Entra, l’application est configurée avec un flux d’utilisateur E-mail avec mot de passe.
nativeAuth.signUp(username: email, delegate: self)
func onSignUpStartError(error: MSAL.SignUpStartError) {
if error.isBrowserRequired {
// handle browser required error
}
}
Lorsque nous appelons la méthode signUp(username:delegate)
à partir de l’instance du Kit de développement logiciel (SDK), nous obtenons une erreur BrowserRequired
, car Microsoft Entra nécessite un type de défi différent (mot de passe dans ce cas) que celui configuré dans le Kit de développement logiciel (SDK).
Gérer l’erreur BrowserRequired
Pour gérer ce type d’erreur, nous devons lancer un navigateur et permettre à l’utilisateur d’y effectuer le flux d’authentification. Ceci peut être fait en appelant la méthode acquireToken()
. Pour utiliser cette méthode, quelques configurations supplémentaires doivent être effectuées :
- Configurer des schémas d’URL dans notre projet Xcode
- Configurer l’URI de redirection dans le centre d’administration Microsoft Entra
Nous pouvons maintenant obtenir un jeton et un compte de manière interactive. Voici un exemple de la procédure à suivre :
func onSignUpStartError(error: MSAL.SignUpStartError) {
if error.isBrowserRequired {
let webviewParams = MSALWebviewParameters(authPresentationViewController: self)
let parameters = MSALInteractiveTokenParameters(scopes: ["User.Read"], webviewParameters: webviewParams)
nativeAuth.acquireToken(with: parameters) { (result: MSALResult?, error: Error?) in
// result will contain account and tokens retrieved in the browser
}
}
}
Les jetons et le compte retournés sont identiques à ceux qui seraient récupérés par le biais d’un flux d’authentification natif.