Bagikan melalui


Aplikasi satu halaman: masuk dan keluar

Sebelum Anda bisa mendapatkan token untuk mengakses API di aplikasi, Anda memerlukan konteks pengguna yang diautentikasi. Untuk mengautentikasi pengguna, Anda dapat menggunakan jendela Pop-up dan/atau metode masuk Pengalihan .

Jika aplikasi Anda memiliki akses ke konteks pengguna atau token ID yang diautentikasi, Anda dapat melewati langkah masuk, dan langsung memperoleh token. Untuk detailnya, lihat Akses menyeluruh (SSO) dengan petunjuk pengguna.

Memilih antara pengalaman pop-up atau pengalihan

Pilihan antara pengalaman pop-up atau pengalihan tergantung pada alur aplikasi Anda.

  • Gunakan jendela pop-up jika Anda tidak ingin pengguna menjauh dari halaman aplikasi utama Anda selama autentikasi. Karena pengalihan autentikasi terjadi di jendela pop-up, status aplikasi utama dipertahankan.

  • Gunakan pengalihan jika pengguna memiliki batasan atau kebijakan browser di mana jendela pop-up dinonaktifkan. Misalnya, ada masalah yang diketahui dengan jendela pop-up di Internet Explorer.

Masuk dengan jendela pop-up

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

Masuk dengan pengalihan

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

Perilaku keluar di browser

Untuk memastikan keluar yang aman dari satu atau beberapa aplikasi, metode berikut disarankan:

  • Pada perangkat bersama, pengguna harus menggunakan mode privat/penyamaran browser dan menutup semua jendela browser sebelum mereka menjauh dari perangkat.

  • Pada perangkat yang tidak dibagikan, pengguna harus menggunakan layar kunci sistem operasi untuk mengunci atau keluar dari seluruh sesi sistem operasi mereka di perangkat. Microsoft menggunakan halaman keluarnya untuk mengingatkan pengguna tentang praktik terbaik privasi dan keamanan ini.

Untuk informasi selengkapnya, lihat Praktik terbaik privasi internet Microsoft.

Jika pengguna memilih untuk tidak keluar menggunakan rekomendasi, berikut ini adalah metode lain untuk mengaktifkan fungsionalitas keluar:

  • Logout Saluran Depan OpenID Koneksi Microsoft untuk keluar federasi. Anda dapat menggunakan opsi ini saat aplikasi berbagi status masuk dengan aplikasi baru, tetapi mengelola token/cookie sesinya sendiri. Ada beberapa batasan untuk implementasi ini di mana konten diblokir, misalnya ketika browser memblokir cookie pihak ketiga.

  • Jendela pop-up dan/atau Pengalihan untuk keluar aplikasi lokal. Metode pop-up dan pengalihan mengakhiri sesi pengguna di titik akhir dan untuk aplikasi lokal. Tetapi, metode ini mungkin tidak segera menghapus sesi untuk aplikasi federasi lainnya jika komunikasi saluran depan diblokir.

Keluar dengan jendela pop-up

MSAL.js v2 dan yang lebih tinggi menyediakan logoutPopup metode yang menghapus cache di penyimpanan browser dan membuka jendela pop-up ke halaman keluar Microsoft Entra. Setelah keluar, pengalihan default ke halaman mulai masuk, dan pop-up ditutup.

Untuk pengalaman setelah keluar, Anda dapat mengatur postLogoutRedirectUri untuk mengalihkan pengguna ke URI tertentu. URI ini harus didaftarkan sebagai URI redirect dalam pendaftaran aplikasi Anda. Anda juga dapat mengonfigurasi logoutPopup untuk mengalihkan jendela utama ke halaman yang berbeda, seperti halaman beranda atau halaman masuk dengan meneruskan mainWindowRedirectUri sebagai bagian dari permintaan.

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

Keluar dengan pengalihan

MSAL.js menyediakan logout metode di v1, dan logoutRedirect metode di v2 yang menghapus cache di penyimpanan browser dan mengalihkan ke halaman keluar Microsoft Entra. Setelah keluar, pengalihan default ke halaman mulai masuk.

Untuk pengalaman setelah keluar, Anda dapat mengatur postLogoutRedirectUri untuk mengalihkan pengguna ke URI tertentu. URI ini harus didaftarkan sebagai URI redirect dalam pendaftaran aplikasi Anda.

Karena pengingat Microsoft tentang praktik terbaik privasi internet tentang menggunakan browser privat dan layar kunci tidak ditampilkan dalam metode ini, Anda mungkin ingin menjelaskan praktik terbaik dan mengingatkan pengguna untuk menutup semua jendela browser.

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

Langkah berikutnya

Beralih ke artikel berikutnya dalam skenario ini, Memperoleh token untuk aplikasi.