Ensidesprogram: inloggning och utloggning

Innan du kan hämta token för att komma åt API:er i ditt program behöver du en autentiserad användarkontext. Om du vill autentisera en användare kan du använda ett popup-fönster och/eller en omdirigeringsmetod .

Om ditt program har åtkomst till en autentiserad användarkontext eller ID-token kan du hoppa över inloggningssteget och hämta token direkt. Mer information finns i Enkel inloggning (SSO) med användartips.

Välja mellan en popup- eller omdirigeringsupplevelse

Valet mellan en popup- eller omdirigeringsupplevelse beror på ditt programflöde.

  • Använd ett popup-fönster om du inte vill att användarna ska flytta från huvudprogramsidan under autentiseringen. Eftersom omdirigeringen av autentisering sker i ett popup-fönster bevaras huvudprogrammets tillstånd.

  • Använd en omdirigering om användarna har webbläsarbegränsningar eller principer där popup-fönster är inaktiverade. Det finns till exempel kända problem med popup-fönster i Internet Explorer.

Logga in med ett popup-fönster

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);
  });

Logga in med en omdirigering

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);

Logga ut-beteende i webbläsare

För att säkerställa säker utloggning av en eller flera appar rekommenderas följande metoder:

  • På delade enheter bör användarna använda en webbläsares privata/inkognitoläge och stänga alla webbläsarfönster innan de går bort från enheten.

  • På enheter som inte delas bör användarna använda en låsskärm för operativsystemet för att låsa eller logga ut från hela operativsystemsessionen på enheten. Microsoft använder sin utloggningssida för att påminna användarna om dessa metodtips för sekretess och säkerhet.

Mer information finns i Microsofts metodtips för internetsekretess.

Om en användare väljer att inte logga ut med hjälp av rekommendationerna är följande andra metoder för att aktivera utloggningsfunktioner:

  • Microsofts OpenID-Anslut Front Channel-utloggning för federerad utloggning. Du kan använda det här alternativet när en app delar ett inloggningstillstånd med en ny app, men hanterar sina egna sessionstoken/cookies. Det finns vissa begränsningar för den här implementeringen där innehåll blockeras, till exempel när webbläsare blockerar cookies från tredje part.

  • Popup-fönster och/eller en omdirigering för lokal app-utloggning. Popup- och omdirigeringsmetoderna avslutar användarens session vid slutpunkten och för den lokala appen. Men de här metoderna kanske inte omedelbart rensar sessionen för andra federerade program om kommunikationen i frontkanalen blockeras.

Logga ut med ett popup-fönster

MSAL.js v2 och senare tillhandahåller en logoutPopup metod som rensar cacheminnet i webbläsarlagringen och öppnar ett popup-fönster till microsoft Entra-utloggningssidan. När du har loggat ut kommer omdirigeringen som standard till startsidan för inloggning och popup-fönstret stängs.

För funktionen efter utloggning kan du ange postLogoutRedirectUri att användaren ska omdirigeras till en specifik URI. Den här URI:n bör registreras som en omdirigerings-URI i din programregistrering. Du kan också konfigurera logoutPopup att omdirigera huvudfönstret till en annan sida, till exempel startsidan eller inloggningssidan genom att skicka mainWindowRedirectUri som en del av begäran.

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);

Logga ut med en omdirigering

MSAL.js tillhandahåller en logout metod i v1 och en logoutRedirect metod i v2 som rensar cacheminnet i webbläsarens lagring och omdirigerar till microsoft Entra-utloggningssidan. När du har loggat ut kommer omdirigeringen som standard till inloggningsstartsidan.

För funktionen efter utloggning kan du ange postLogoutRedirectUri att användaren ska omdirigeras till en specifik URI. Den här URI:n bör registreras som en omdirigerings-URI i din programregistrering.

Eftersom Microsofts påminnelse om bästa praxis för internetsekretess om att använda en privat webbläsare och låsskärm inte visas i den här metoden kanske du vill beskriva metodtips och påminna användarna om att stänga alla webbläsarfönster.

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);

Nästa steg

Gå vidare till nästa artikel i det här scenariot, Hämta en token för appen.