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.
Si vous disposez déjà d’une session qui existe avec le serveur d’authentification, vous pouvez utiliser l’API ssoSilent() pour effectuer une demande de jetons sans interaction.
Avec une indication utilisateur
Si vous disposez déjà des informations de connexion de l’utilisateur, vous pouvez le transmettre à l’API pour améliorer les performances et vous assurer que le serveur d’autorisation recherche la session de compte appropriée. Vous pouvez transmettre l’un des éléments suivants dans l’objet de requête afin d’obtenir un jeton silencieusement avec succès.
-
account(qui peut être récupéré à l’aide des API de compte) -
sid(qui peut être récupéré à partir duidTokenClaimsd’un objetaccount) -
login_hint(qui peut être récupéré à partir de la propriétéusernamede l’objet de compte ou de la revendicationupndans le jeton d’ID)
La transmission d’un compte recherche d’abord la revendication sid dans les revendications du jeton, puis utilise en second recours loginHint (s’il est fourni) ou le nom d’utilisateur du compte.
const silentRequest: SsoSilentRequest = {
scopes: ["User.Read", "Mail.Read"],
loginHint: "user@contoso.com"
};
this.authService.ssoSilent(silentRequest)
.subscribe({
next: (result) => console.log("Success!"), // Handle result
error: (error) => console.log(error) // Handle error
});
Sans indication utilisateur
S’il n’y a pas suffisamment d’informations disponibles sur l’utilisateur, vous pouvez tenter d’utiliser l’API ssoSilentsans passer un account, sid ou login_hint.
const silentRequest = {
scopes: ["User.Read", "Mail.Read"]
};
Toutefois, sachez que si votre application a des chemins de code pour plusieurs utilisateurs dans une session de navigateur unique ou si l’utilisateur a plusieurs comptes pour cette session de navigateur unique, il existe une probabilité plus élevée d’erreurs de connexion silencieuses. L’erreur suivante peut s’afficher en cas de plusieurs sessions de compte trouvées par le serveur d’autorisation :
InteractionRequiredAuthError: interaction_required: AADSTS16000: Either multiple user identities are available for the current request or selected account is not supported for the scenario.
Cela indique que le serveur n’a pas pu déterminer quel compte se connecter, et nécessite l’un des paramètres ci-dessus (account, login_hint, sid) ou une connexion interactive pour choisir le compte.
Gestion des échecs
Si ssoSilent() échoue, nous vous recommandons de gérer cette erreur en vous connectant de manière interactive. Voici un exemple de ssoSilent() utilisé dans les applications app.component.ts:
import { Component, OnInit } from '@angular/core';
import { MsalService } from '@azure/msal-angular';
import { SilentRequest, SsoSilentRequest } from '@azure/msal-browser';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit {
constructor(
private authService: MsalService,
) {}
ngOnInit(): void {
const silentRequest: SsoSilentRequest = {
scopes: ["User.Read"],
loginHint: "user@contoso.com"
}
this.authService.ssoSilent(silentRequest)
.subscribe({
next: (result: AuthenticationResult) => {
console.log("SsoSilent succeeded!"); // Handle result
},
error: (error) => {
this.authService.loginRedirect(); // Handle error by logging in interactively
}
});
}
}