Automatische AuthentifizierungSilent authentication

Hinweis

Damit die Authentifizierung für Ihre Registerkarte auf mobilen Clients funktioniert, müssen Sie sicherstellen, dass Sie mindestens die Version 1.4.1 von Microsoft Teams JavaScript SDK verwenden.For authentication to work for your tab on mobile clients, you need to ensure you're using at least the 1.4.1 version of the Teams JavaScript SDK.

Bei der automatischen Authentifizierung in Azure Active Directory (Azure AD) wird minimiert, wie oft ein Benutzer seine Anmeldeinformationen eingeben muss, indem er das Authentifizierungstoken automatisch aktualisiert.Silent authentication in Azure Active Directory (Azure AD) minimizes the number of times a user needs to enter their login credentials by silently refreshing the authentication token. (Für eine echte Unterstützung für einmaliges Anmelden sehen Sie sich unsere SSO-Dokumentationan)(For true single sign-on support, view our SSO Documentation)

Wenn Sie den Code vollständig clientseitig beibehalten möchten, können Sie die Azure Active Directory-Authentifizierungsbibliothek für JavaScript verwenden, um zu versuchen, ein Azure AD Zugriffstoken im Hintergrund abzurufen.If you want to keep your code completely client-side, you can use the Azure Active Directory Authentication Library for JavaScript to attempt to acquire an Azure AD access token silently. Dies bedeutet, dass dem Benutzer möglicherweise kein Popupdialogfeld angezeigt wird, wenn er sich kürzlich angemeldet hat.This means that the user may never see a popup dialog if they have signed in recently.

Auch wenn die ADAL.js Bibliothek für AngularJS-Anwendungen optimiert ist, funktioniert Sie auch mit reinen JavaScript-Einzelseiten-Anwendungen.Even though the ADAL.js library is optimized for AngularJS applications, it also works with pure JavaScript single-page applications.

Hinweis

Derzeit funktioniert die unbeaufsichtigte Authentifizierung nur für Registerkarten.Currently, silent authentication only works for tabs. Sie funktioniert noch nicht, wenn Sie sich von einem bot aus anmelden.It does not yet work when signing in from a bot.

Funktionsweise der automatischen AuthentifizierungHow silent authentication works

Die ADAL.js Bibliothek erstellt einen ausgeblendeten IFRAME für den impliziten Grant Flow von OAuth 2,0, gibt jedoch an prompt=none , dass Azure Ad die Anmeldeseite nie anzeigt.The ADAL.js library creates a hidden iframe for OAuth 2.0 implicit grant flow, but it specifies prompt=none so that Azure AD never shows the login page. Wenn Benutzerinteraktionen erforderlich sind, da der Benutzer sich anmelden oder Zugriff auf die Anwendung gewähren muss, gibt Azure AD umgehend einen Fehler zurück, der ADAL.js dann an Ihre APP meldet.If user interaction is required because the user needs to log in or grant access to the application, Azure AD will immediately return an error that ADAL.js then reports to your app. An dieser Position kann Ihre APP bei Bedarf eine Anmeldeschaltfläche anzeigen.At this point your app can show a login button if needed.

Vorgehensweise zur automatischen AuthentifizierungHow to do silent authentication

Der Code in diesem Artikel stammt aus der Beispiel-APP Microsoft Teams-Authentifizierungs Beispiel (Knoten)von Teams.The code in this article comes from the Teams sample app Microsoft Teams Authentication Sample (Node).

einschließen und Konfigurieren von Adalinclude and configure ADAL

Schließen Sie die ADAL.js Bibliothek in Ihre Registerkartenseiten ein, und konfigurieren Sie Adal mit Ihrer Client-ID und der Umleitungs-URL:Include the ADAL.js library in your tab pages and configure ADAL with your client ID and redirect URL:

<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">
    // ADAL.js 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>

Abrufen des BenutzerkontextsGet the user context

Rufen Sie auf der Registerkarte Inhaltsseite microsoftTeams.getContext() einen Anmelde Hinweis für den aktuellen Benutzer ab.In the tab's content page, call microsoftTeams.getContext() to get a login hint for the current user. Dies wird als login_hint im Aufruf von Azure AD verwendet.This will be used as a login_hint in the call to Azure AD.

// Set up extra query parameters for ADAL
// - 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";
}

AuthentifizierenAuthenticate

Wenn Adal ein nicht abgelaufenes Token für den Benutzer zwischengespeichert hat, verwenden Sie diese.If ADAL has an unexpired token cached for the user, use that. Andernfalls wird versucht, ein Token im Hintergrund abzurufen, indem es aufgerufen wird acquireToken(resource, callback) .Otherwise, attempt to get a token silently by calling acquireToken(resource, callback). ADAL.js rufen ihre Rückruffunktion mit dem angeforderten Token auf, oder es tritt ein Fehler auf, wenn die Authentifizierung fehlschlägt.ADAL.js will call your callback function with the requested token, or an error if authentication fails.

Wenn Sie in der Rückruffunktion einen Fehler erhalten, zeigen Sie eine Anmeldeschaltfläche an, und greifen Sie auf eine explizite Anmeldung zurück.If you get an error in the callback function, show a login button and fall back to an explicit login.

let authContext = new AuthenticationContext(config); // from the ADAL.js library
// See if there's 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 ADAL.js returns if we ask for resource = clientId)
authContext.acquireToken(config.clientId, function (errDesc, token, err, tokenType) {
    if (token) {
        // Make sure ADAL 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.
    }
});

Verarbeiten des RückgabewertsProcess the return value

Lassen Sie ADAL.js das Ergebnis aus Azure AD analysieren, indem Sie AuthenticationContext.handleWindowCallback(hash) die Anmelde Rückruf Seite aufrufen.Let ADAL.js take care of parsing the result from Azure AD by calling AuthenticationContext.handleWindowCallback(hash) in the login callback page.

Stellen Sie sicher, dass wir über einen gültigen Benutzer verfügen und den microsoftTeams.authentication.notifySuccess() microsoftTeams.authentication.notifyFailure() Status zurück zur Inhaltsseite des Hauptregisterkarten Berichts aufrufen.Check that we have a valid user and call microsoftTeams.authentication.notifySuccess() or microsoftTeams.authentication.notifyFailure() to report status back to your main tab content page.

if (authContext.isCallback(window.location.hash)) {
    authContext.handleWindowCallback(window.location.hash);
    if (window.parent === window) {
        if (authContext.getCachedUser()) {
            microsoftTeams.authentication.notifySuccess();
        } else {
            microsoftTeams.authentication.notifyFailure(authContext.getLoginError());
        }
    }
}