Utiliser l’authentification silencieuse dans Azure AD

Important

Le support et le développement Microsoft pour la bibliothèque d’authentification Active Directory (ADAL), y compris les correctifs de sécurité, se terminent le 30 juin 2022. Pour continuer à recevoir du support, mettez à jour vos applications pour utiliser la bibliothèque d’authentification Microsoft (MSAL). Consultez Migrer des applications vers la bibliothèque d’authentification Microsoft (MSAL).

Notes

Pour que l’authentification fonctionne pour votre onglet sur les clients mobiles, assurez-vous que vous utilisez le Kit de développement logiciel (SDK) JavaScript Teams version 1.4.1 ou ultérieure.

L’authentification silencieuse dans Azure AD réduit le nombre de fois qu’un utilisateur entre ses informations d’identification en actualisant silencieusement le jeton d’authentification. Pour obtenir la prise en charge de l’authentification unique réelle, consultez la documentation de l’authentification unique.

Pour conserver votre code côté client, utilisez la bibliothèque d’authentification Azure AD pour JavaScript afin d’obtenir un jeton d’accès Microsoft Azure Active Directory (Azure AD) en mode silencieux. Si l’utilisateur s’est connecté récemment, il ne voit pas de boîte de dialogue contextuelle.

Bien que Bibliothèque d'authentification Active Directory soit optimisé pour les applications AngularJS, il fonctionne également avec les applications monopages (SPA) JavaScript.

Notes

Actuellement, l’authentification silencieuse fonctionne uniquement pour les onglets. Il ne fonctionne pas lors de la connexion à partir d’un bot.

Fonctionnement de l’authentification silencieuse

La bibliothèque d’authentification Active Directory crée un iframe masqué pour le flux d’octroi implicite OAuth 2.0. Mais la bibliothèque spécifie prompt=none, de sorte que Azure AD n’affiche pas la page de connexion. Une interaction utilisateur peut être nécessaire si l’utilisateur doit se connecter ou accorder l’accès à l’application. Si l’interaction utilisateur est nécessaire, Azure AD renvoie une erreur que la bibliothèque signale à votre application. Si nécessaire, votre application peut désormais afficher une option de connexion.

Procédure d’authentification silencieuse

Le code de cet article provient de l’exemple d’application Teams qui est nœud d’exemple d’authentification Teams.

Lancer l’onglet configurable d’authentification silencieuse et simple à l’aide de Azure AD et suivez les instructions pour exécuter l’exemple sur votre ordinateur local.

Inclure et configurer Bibliothèque d'authentification Active Directory

Incluez Bibliothèque d'authentification Active Directory dans vos pages d’onglets et configurez la bibliothèque avec votre ID client et l’URL de redirection :

<script src="https://secure.aadcdn.microsoftonline-p.com/lib/1.0.15/js/adal.min.js" integrity="sha384-lIk8T3uMxKqXQVVfFbiw0K/Nq+kt1P3NtGt/pNexiDby2rKU6xnDY8p16gIwKqgI" crossorigin="anonymous"></script>
<script type="text/javascript">
    // Active Directory Authentication Library configuration
    let config = {
        clientId: "YOUR_APP_ID_HERE",
        // redirectUri must be in the list of redirect URLs for the Azure AD app
        redirectUri: window.location.origin + "/tab-auth/silent-end",
        cacheLocation: "localStorage",
        navigateToLoginRequestUrl: false,
    };
</script>

Obtenir l'utilisateur pour le contexte actuel

Dans la page de contenu de l’onglet, appelez app.getContext() pour obtenir un indicateur de connexion pour l’utilisateur actuel. L’indicateur est utilisé comme un loginHint appel à Azure AD.

// Set up extra query parameters for Active Directory Authentication Library
// - openid and profile scope adds profile information to the id_token
// - login_hint provides the expected user name
if (loginHint) {
    config.extraQueryParameter = "scope=openid+profile&login_hint=" + encodeURIComponent(loginHint);
} else {
    config.extraQueryParameter = "scope=openid+profile";
}

Authentifier

Si un jeton non expiré est mis en cache pour la bibliothèque d’authentification Active Directory pour l’utilisateur, utilisez le jeton. Vous pouvez également appeler acquireToken(resource, callback) pour recevoir un jeton en mode silencieux. La bibliothèque appelle une fonction de rappel avec le jeton demandé ou génère une erreur en cas d’échec de l’authentification.

Si vous obtenez une erreur dans la fonction de rappel, affichez et utilisez une option de connexion explicite.

let authContext = new AuthenticationContext(config); // from Active Directory Authentication Library
// See if there is a cached user and it matches the expected user
let user = authContext.getCachedUser();
if (user) {
    if (user.profile.oid !== userObjectId) {
        // User doesn't match, clear the cache
        authContext.clearCache();
    }
}

// In this example we are getting an id token (which Active Directory Authentication Library returns if we ask for resource = clientId)
authContext.acquireToken(config.clientId, function (errDesc, token, err, tokenType) {
    if (token) {
        // Make sure Active Directory Authentication Library gave us an ID token
        if (tokenType !== authContext.CONSTANTS.ID_TOKEN) {
            token = authContext.getCachedToken(config.clientId);
        }
        showProfileInformation(idToken);
    } else {
        console.log("Renewal failed: " + err);
        // Failed to get the token silently; show the login button
        showLoginButton();
        // You could attempt to launch the login popup here, but in browsers this could be blocked by
        // a popup blocker, in which case the login attempt will fail with the reason FailedToOpenWindow.
    }
});

Traiter la valeur de retour

La bibliothèque d’authentification Active Directory analyse le résultat de Azure AD en appelant AuthenticationContext.handleWindowCallback(hash) la page de rappel de connexion.

Vérifiez que vous disposez d’un utilisateur valide et appelez authentication.notifySuccess() ou authentication.notifyFailure() pour signaler l’état à votre page de contenu de l’onglet principal.

import { authentication } from "@microsoft/teams-js";
if (authContext.isCallback(window.location.hash)) {
    authContext.handleWindowCallback(window.location.hash);
    if (window.parent === window) {
        if (authContext.getCachedUser()) {
            authentication.notifySuccess();
        } else {
            authentication.notifyFailure(authContext.getLoginError());
        }
    }
}

Gérer le flux de déconnexion

Utilisez le code suivant pour gérer le flux de déconnexion dans Azure AD l’authentification :

Notes

Lorsque vous déconnexion à partir de Teams onglet ou bot, la session active est désactivée.

function logout() {
localStorage.clear();
window.location.href = "@Url.Action("<<Action Name>>", "<<Controller Name>>")";
}

Voir aussi