Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ini adalah dokumentasi Akun khusus platform untuk @azure/msal-browser pustaka, yang menyediakan API berikut untuk mengakses akun cache:
-
getAllAccounts(): mengembalikan semua akun yang saat ini ada di cache. Mendukung filter opsional untuk mengembalikan sekumpulan akun tertentu. Aplikasi harus memilih akun untuk memperoleh token secara diam-diam. -
getAccount(): mengembalikan akun cache pertama yang cocok dengan filter yang diteruskan. Urutan di mana akun dibaca dari cache bersifat arbitrer dan tidak ada jaminan bahwa akun pertama dalam daftar yang difilter akan sama untuk dua panggilangetAccount. Seperti yang dijelaskan di bawah ini, meningkatkan jumlah atribut filter akan memberikan kecocokan yang lebih tepat.
Objek Filter Akun
Dokumentasi jenis AccountFilter mencantumkan properti yang dapat digunakan dan digabungkan untuk memfilter akun.
Note
Atribut filter akun tunggal biasanya tidak dijamin untuk mengidentifikasi objek akun yang di-cache secara unik. Menambahkan kombinasi atribut yang tidak diulang bersama-sama, seperti homeAccountId + localAccountId, dapat membantu menyempurnakan pencarian.
Note
realm berada tenantId di cache.
API berikut getAccountBy tidak digunakan lagi. Silakan gunakan getAccount() dengan objek filter yang sesuai sebagai gantinya:
-
getAccountByHomeId(): gunakangetAccount({ homeAccountId })sebagai gantinya. -
getAccountByLocalId(): gunakangetAccount({ localAccountId })sebagai gantinya. -
getAccountByUsername(): gunakangetAccount({ username })sebagai gantinya.
Berikut ini adalah contoh penggunaan yang mencakup API ini:
let homeAccountId = null; // Initialize global accountId (can also be localAccountId or username) used for account lookup later, ideally stored in app state
// This callback is passed into `acquireTokenPopup` and `acquireTokenRedirect` to handle the interactive auth response
function handleResponse(resp) {
if (resp !== null) {
homeAccountId = resp.account.homeAccountId; // alternatively: resp.account.homeAccountId or resp.account.username
} else {
const currentAccounts = myMSALObj.getAllAccounts();
if (currentAccounts.length < 1) { // No cached accounts
return;
} else if (currentAccounts.length > 1) { // Multiple account scenario
// Add account selection code here
homeAccountId = ...
} else if (currentAccounts.length === 1) {
homeAccountId = currentAccounts[0].homeAccountId; // Single account scenario
}
}
}
Sekarang, properti akun seperti: homeAccountId, localAccountId, dan username dapat digunakan untuk mencari akun cache sebelum memperoleh token secara diam-diam:
// This method attempts silent token acquisition and falls back on acquireTokenPopup
async function getTokenPopup(request, homeAccountId) {
// In this case, accounts are filtered by homeAccountId, but more attributes can be added to refine the search and increase the precision of the account filter
const accountFilter = {
homeAccountId: homeAccountId,
};
request.account = myMSALObj.getAccount(accountFilter);
return await myMSALObj.acquireTokenSilent(request).catch(async (error) => {
// Handle error
return await myMSALObj.acquireTokenPopup(request);
});
}
Pemfilteran menurut petunjuk masuk
@azure/msal-browser@3.2.0Pada , semua nilai petunjuk masuk dapat digunakan untuk mencari dan memfilter akun. Untuk memfilter menurut petunjuk masuk, MSAL akan membandingkan loginHint nilai dalam AccountFilter objek dengan atribut akun berikut (dalam urutan prioritas) untuk mencari kecocokan:
-
login_hintKlaim token ID -
usernameproperti akun -
upnKlaim token ID
Note
Semua atribut di atas dapat diteruskan ke filter akun sebagai loginHint properti . Filter akun juga akan menerima username atribut sebagai username, dan akan menghasilkan pencarian yang lebih berkinerja.
Menggunakan login_hint klaim
const accountFilter = {
loginHint: previouslyObtainedIdTokenClaims.login_hint;
};
request.account = myMSALObj.getAccount(accountFilter);
return await myMSALObj.acquireTokenSilent(request).catch(async (error) => {
// Handle error
return await myMSALObj.acquireTokenPopup(request);
});
Menggunakan 'nama pengguna''
Note
Nilai username dapat disertakan AccountFilter dalam objek sebagai username atau loginHint. Ini karena username klaim adalah salah satu dari 3 nilai (bersama dengan login_hint klaim token ID dan upn ) yang diterima layanan token sebagai petunjuk masuk. Jika aplikasi Anda yakin bahwa nilai yang dimaksud adalah username, mengaturnya karena AccountFilter.username properti akan menghasilkan performa pencarian yang lebih baik. Mampu menetapkan username nilai sebagaimana loginHint berguna jika aplikasi Anda menggunakan petunjuk masuk dan tidak menyimpan konteks tentang apakah nilai tersebut berasal dari usernameklaim , , login_hintatau upn .
Meneruskan username sebagai loginHint
const accountUsername = userProfile.username;
const accountFilter = {
loginHint: accountUsername;
};
request.account = myMSALObj.getAccount(accountFilter);
return await myMSALObj.acquireTokenSilent(request).catch(async (error) => {
// Handle error
return await myMSALObj.acquireTokenPopup(request);
});
Meneruskan username sebagai username
const accountUsername = userProfile.username;
const accountFilter = {
username: accountUsername;
};
request.account = myMSALObj.getAccount(accountFilter);
return await myMSALObj.acquireTokenSilent(request).catch(async (error) => {
// Handle error
return await myMSALObj.acquireTokenPopup(request);
});
Menggunakan upn klaim
const accountFilter = {
loginHint: previouslyObtainedIdTokenClaims.upn;
};
request.account = myMSALObj.getAccount(accountFilter);
return await myMSALObj.acquireTokenSilent(request).catch(async (error) => {
// Handle error
return await myMSALObj.acquireTokenPopup(request);
});
API Akun Aktif
@azure/msal-browser Pustaka juga menyediakan 2 API yang nyaman untuk membantu Anda melacak akun mana yang saat ini "aktif" dan harus digunakan untuk permintaan token.
-
getActiveAccount(): Mengembalikan akun aktif saat ini -
setActiveAccount(): Menerima objek akun dan menetapkannya sebagai akun aktif
Memutuskan akun mana yang akan digunakan untuk memperoleh token tergantung pada aplikasi, namun, setelah Anda menentukan akun mana yang ingin Anda gunakan, cukup panggil setActiveAccount() API dengan objek akun yang dipilih. Setiap acquireTokenpanggilan , login atau ssoSilent sekarang akan menggunakan akun aktif secara default jika akun yang berbeda tidak ditentukan dalam permintaan individual. Untuk menghapus akun aktif saat ini, Anda dapat memanggil setActiveAccount(null).
function login() {
return myMsalObj.loginPopup().then((response) => {
// After a successful login set the active account to be the user that just logged in
myMsalObj.setActiveAccount(response.account);
});
}
function getAccessToken() {
// Providing an account in the token request is not required if there is an active account set
return myMsalObj.acquireTokenSilent({ scopes: ["User.Read"] });
}
Catatan: Pada versi 2.16.0, akun aktif disimpan di lokasi cache yang dikonfigurasi pada instans Anda PublicClientApplication . Jika Anda menggunakan versi sebelumnya, akun aktif disimpan dalam memori dan dengan demikian harus diatur ulang pada setiap pemuatan halaman.
Autentikasi Aplikasi Berlapis
Untuk aplikasi NAA, setActiveAccount() dan getActiveAccount() merupakan API NO-OP. Meskipun pengguna dapat mengatur dan mendapatkan akun aktif, mereka secara aktif diabaikan karena aplikasi NAA selalu diharapkan memiliki satu akun dan akun disediakan oleh aplikasi host dengan accountContext. Di masa mendatang ketika beberapa akun didukung di seluruh hub, perilaku ini diharapkan berubah.
Notes
- Sampel default msal-browser saat ini memiliki skenario akun tunggal yang berfungsi.
- Jika Anda memiliki beberapa skenario akun, ubah sampel (dalam
handleResponse()) untuk mencantumkan semua akun yang di-cache dan pilih akun tertentu. - Jika aplikasi ingin mengambil akun berdasarkan
username, aplikasi perlu menyimpanusername(dari responsloginAPI untuk pengguna tertentu) sebelum menggunakanusernamefilter digetAccount()API. -
getAllAccounts()akan mengembalikan beberapa akun jika Anda telah membuat beberapa permintaan token interaktif dan pengguna telah memilih akun yang berbeda dalam dua atau beberapa interaksi tersebut. Anda mungkin perlu meneruskanprompt: "select_account"atauprompt: "login"ke acquireToken interaktif atau API masuk agar Microsoft Entra ID menampilkan layar pemilihan akun setelah interaksi pertama. - API akun mengembalikan status akun lokal dan tidak selalu mencerminkan status server. Mereka mengembalikan akun yang sebelumnya telah masuk ke aplikasi ini menggunakan MSAL.js dan sesi server mungkin atau mungkin masih belum aktif.
- Dua aplikasi yang dihosting di domain yang berbeda tidak berbagi status akun karena penyimpanan browser dipisahkan oleh domain.
-
getAllAccounts()tidak diurutkan dan tidak dijamin berada dalam urutan yang sama di beberapa panggilan - Setiap panggilan yang berhasil ke acquireToken atau API login akan mengembalikan tepat satu akun