Aplikacja jednostronicowa: logowanie i wylogowywanie

Aby uzyskać tokeny umożliwiające dostęp do interfejsów API w aplikacji, musisz mieć uwierzytelniony kontekst użytkownika. Aby uwierzytelnić użytkownika, możesz użyć okna podręcznego i/lub metody logowania przekierowania.

Jeśli aplikacja ma dostęp do uwierzytelnionego kontekstu użytkownika lub tokenu identyfikatora, możesz pominąć krok logowania i uzyskać tokeny bezpośrednio. Aby uzyskać szczegółowe informacje, zobacz Logowanie jednokrotne (SSO) z wskazówką dla użytkownika.

Wybieranie między okienkiem wyskakującym lub przekierowywaniem

Wybór między wyskakującym lub przekierowywanym środowiskiem zależy od przepływu aplikacji.

  • Jeśli nie chcesz, aby użytkownicy odeszli od strony głównej aplikacji podczas uwierzytelniania, użyj okna podręcznego. Ponieważ przekierowanie uwierzytelniania odbywa się w oknie podręcznym, stan głównej aplikacji jest zachowywany.

  • Użyj przekierowania, jeśli użytkownicy mają ograniczenia przeglądarki lub zasady, w których okna podręczne są wyłączone. Istnieją na przykład znane problemy z oknami podręcznymi w programie Internet Explorer.

Zaloguj się przy użyciu okna podręcznego

const config = {
  auth: {
    clientId: "your_app_id",
    redirectUri: "your_app_redirect_uri", //defaults to application start page
    postLogoutRedirectUri: "your_app_logout_redirect_uri",
  },
};

const loginRequest = {
  scopes: ["User.ReadWrite"],
};

let accountId = "";

const myMsal = new PublicClientApplication(config);

myMsal
  .loginPopup(loginRequest)
  .then(function (loginResponse) {
    accountId = loginResponse.account.homeAccountId;
    // Display signed-in user content, call API, etc.
  })
  .catch(function (error) {
    //login failure
    console.log(error);
  });

Logowanie przy użyciu przekierowania

const config = {
  auth: {
    clientId: "your_app_id",
    redirectUri: "your_app_redirect_uri", //defaults to application start page
    postLogoutRedirectUri: "your_app_logout_redirect_uri",
  },
};

const loginRequest = {
  scopes: ["User.ReadWrite"],
};

let accountId = "";

const myMsal = new PublicClientApplication(config);

function handleResponse(response) {
  if (response !== null) {
    accountId = response.account.homeAccountId;
    // Display signed-in user content, call API, etc.
  } else {
    // In case multiple accounts exist, you can select
    const currentAccounts = myMsal.getAllAccounts();

    if (currentAccounts.length === 0) {
      // no accounts signed-in, attempt to sign a user in
      myMsal.loginRedirect(loginRequest);
    } else if (currentAccounts.length > 1) {
      // Add choose account code here
    } else if (currentAccounts.length === 1) {
      accountId = currentAccounts[0].homeAccountId;
    }
  }
}

myMsal.handleRedirectPromise().then(handleResponse);

Zachowanie wylogowywanie się w przeglądarkach

Aby zapewnić bezpieczne wylogowanie z co najmniej jednej aplikacji, zalecane są następujące metody:

  • Na urządzeniach udostępnionych użytkownicy powinni używać trybu prywatnego/incognito przeglądarki i zamykać wszystkie okna przeglądarki przed odejściem od urządzenia.

  • Na urządzeniach, które nie są udostępniane, użytkownicy powinni używać ekranu blokady systemu operacyjnego, aby zablokować lub wylogować się z całej sesji systemu operacyjnego na urządzeniu. Firma Microsoft używa swojej strony wylogowywanie, aby przypomnieć użytkownikom o tych najlepszych rozwiązaniach dotyczących prywatności i zabezpieczeń.

Aby uzyskać więcej informacji, zobacz Najlepsze rozwiązania firmy Microsoft dotyczące prywatności w Internecie.

Jeśli użytkownik zdecyduje się nie wylogować się przy użyciu zaleceń, są to inne metody włączania funkcji wylogowywanie:

  • Wylogowywanie aplikacji Front Channel firmy Microsoft w usłudze OpenID Połączenie na potrzeby federacyjnego wylogowania. Tej opcji można użyć, gdy aplikacja udostępnia stan logowania nowej aplikacji, ale zarządza własnymi tokenami sesji/plikami cookie. W tej implementacji obowiązują pewne ograniczenia, w przypadku których zawartość jest blokowana, na przykład gdy przeglądarki blokują pliki cookie innych firm.

  • Okno podręczne i/lub wylogowywanie przekierowania dla aplikacji lokalnej. Metody wyskakujące i przekierowania kończą sesję użytkownika w punkcie końcowym i dla aplikacji lokalnej. Jednak te metody mogą nie od razu wyczyścić sesji dla innych aplikacji federacyjnych, jeśli komunikacja z kanałem frontonu jest zablokowana.

Wyloguj się przy użyciu okna podręcznego

MSAL.js w wersji 2 i nowszej udostępnia metodę, która czyści pamięć podręczną logoutPopup w magazynie przeglądarki i otwiera okno podręczne na stronie wylogowywanie firmy Microsoft. Po wylogowaniu domyślne przekierowanie do strony startowej logowania i wyskakujące okienko jest zamykane.

W przypadku środowiska po wylogowaniu można ustawić wartość postLogoutRedirectUri , aby przekierować użytkownika do określonego identyfikatora URI. Ten identyfikator URI powinien być zarejestrowany jako identyfikator URI przekierowania w rejestracji aplikacji. Możesz również skonfigurować logoutPopup przekierowanie okna głównego do innej strony, takiej jak strona główna lub strona logowania, przekazując mainWindowRedirectUri jako część żądania.

const config = {
  auth: {
    clientId: "your_app_id",
    redirectUri: "your_app_redirect_uri", // defaults to application start page
    postLogoutRedirectUri: "your_app_logout_redirect_uri",
  },
};

const myMsal = new PublicClientApplication(config);

// you can select which account application should sign out
const logoutRequest = {
  account: myMsal.getAccountByHomeId(homeAccountId),
  mainWindowRedirectUri: "your_app_main_window_redirect_uri",
};

await myMsal.logoutPopup(logoutRequest);

Wyloguj się przy użyciu przekierowania

MSAL.js udostępnia metodę w wersji 1 i metodę logoutRedirect w wersji 2, która czyści pamięć podręczną logout w magazynie przeglądarki i przekierowuje do strony wylogowania firmy Microsoft Entra. Po wylogowaniu nastąpi domyślne przekierowanie na stronę początkową logowania.

W przypadku środowiska po wylogowaniu można ustawić wartość postLogoutRedirectUri , aby przekierować użytkownika do określonego identyfikatora URI. Ten identyfikator URI powinien być zarejestrowany jako identyfikator URI przekierowania w rejestracji aplikacji.

Ponieważ przypomnienie firmy Microsoft o najlepszych rozwiązaniach dotyczących ochrony prywatności w Internecie dotyczących korzystania z przeglądarki prywatnej i ekranu blokady nie jest wyświetlane w tej metodzie, warto opisać najlepsze rozwiązania i przypomnieć użytkownikom, aby zamknęli wszystkie okna przeglądarki.

const config = {
  auth: {
    clientId: "your_app_id",
    redirectUri: "your_app_redirect_uri", //defaults to application start page
    postLogoutRedirectUri: "your_app_logout_redirect_uri",
  },
};

const myMsal = new PublicClientApplication(config);

// you can select which account application should sign out
const logoutRequest = {
  account: myMsal.getAccountByHomeId(homeAccountId),
};

myMsal.logoutRedirect(logoutRequest);

Następne kroki

Przejdź do następnego artykułu w tym scenariuszu Uzyskiwanie tokenu dla aplikacji.