Fiókok az MSAL Böngészőben

Ez a tár platformspecifikus fiókdokumentációja @azure/msal-browser , amely a következő API-kat biztosítja a gyorsítótárazott fiókok eléréséhez:

  • getAllAccounts(): a gyorsítótárban jelenleg található összes fiókot adja vissza. Egy választható szűrőt támogat egy adott fiókkészlet visszaadásához. Az alkalmazásnak ki kell választania egy fiókot a jogkivonatok csendes beszerzéséhez.
  • getAccount(): az első gyorsítótárazott fiókot adja vissza, amely megfelel a megadott szűrőnek. A fiókok gyorsítótárból való olvasásának sorrendje tetszőleges, és nincs garancia arra, hogy a szűrt listában szereplő első fiók ugyanaz lesz a két hívás getAccountesetén. Az alábbiakban ismertetett módon a szűrőattribútumok számának növelése pontosabb egyezéseket biztosít.

Fiókszűrő objektum

Az AccountFilter típusú dokumentáció felsorolja a fiókok szűréséhez használható és kombinálható tulajdonságokat.

Note

Az egyetlen fiókszűrő attribútum általában nem garantálja a gyorsítótárazott fiókobjektum egyedi azonosítását. Az olyan attribútumok kombinációjának hozzáadása, amelyek nem ismétlődnek együtt, például homeAccountId + localAccountId, segíthetnek a keresés finomításában.

Note

realm a gyorsítótárban található tenantId .

A következő getAccountBy API-k elavultak. Ehelyett használjon getAccount() egy megfelelő szűrőobjektumot:

  • getAccountByHomeId(): használja getAccount({ homeAccountId }) helyette.
  • getAccountByLocalId(): használja getAccount({ localAccountId }) helyette.
  • getAccountByUsername(): használja getAccount({ username }) helyette.

Az alábbi használati példák az alábbi API-kat ismertetik:


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

Most a fióktulajdonságok, például a következők: homeAccountId, localAccountIdés username a gyorsítótárazott fiók keresésére használhatók a jogkivonat csendes beszerzése előtt:

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

Szűrés bejelentkezési tipp alapján

@azure/msal-browser@3.2.0Az összes bejelentkezési tippérték használható a fiókok keresésére és szűrésére. A bejelentkezési tipp alapján történő szűréshez az MSAL összehasonlítja az loginHintAccountFilter objektum értékét a következő fiókattribútumokkal (sorrendben) az egyezések kereséséhez:

  • login_hint Azonosító jogkivonat jogcíme
  • username fióktulajdonság
  • upn Azonosító jogkivonat jogcíme

Note

A fenti összes attribútum átadható a fiókszűrőbe tulajdonságként loginHint . A fiókszűrő az username attribútumot usernameis elfogadja, és hatékonyabb keresést eredményez.

Jogcím használata login_hint

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

Felhasználónév használata

Note

Az username érték szerepelhet az AccountFilter objektumban vagy usernameloginHinta . Ennek az az oka, hogy a username jogcím egyike annak a 3 értéknek (valamint az login_hint azonosító upn jogkivonat jogcímeinek), amelyet a jogkivonat-szolgáltatás bejelentkezési tippként fogad el. Ha az alkalmazás biztos abban, hogy a kérdéses érték egy username, a tulajdonságként AccountFilter.username való beállítás jobb keresési teljesítményt eredményez. username loginHint Ha az alkalmazás bejelentkezési tippet használ, és nem tartja meg a kontextust, hogy ez az érték egy , vagy upn jogcímből usernameszármazik-e, login_hintakkor az hasznos.

Átadás másként usernameloginHint

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

Átadás másként usernameusername

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

Jogcím használata upn

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

Aktív fiók API-k

A @azure/msal-browser kódtár 2 kényelmes API-t is biztosít, amelyek segítségével nyomon követheti, hogy melyik fiók jelenleg "aktív", és a tokenkérelmekhez kell használni.

  • getActiveAccount(): Az aktuális aktív fiókot adja vissza
  • setActiveAccount(): Fogadja a fiókobjektumot, és aktív fiókként állítja be

A jogkivonatok beszerzéséhez használandó fiók kiválasztása alkalmazásfüggő, azonban miután meghatározta, hogy melyik fiókot szeretné használni, egyszerűen hívja meg az setActiveAccount() API-t a kiválasztott fiókobjektummal. Bármely acquireToken, login vagy ssoSilent hívás alapértelmezés szerint az aktív fiókot fogja használni, ha nincs megadva egy másik fiók az egyéni kérelemben. Az aktuálisan aktív fiók törléséhez hívhatja meg a fiókot 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"] });
}

Megjegyzés: A 2.16.0-s verziótól az aktív fiók a példányon PublicClientApplication konfigurált gyorsítótárban van tárolva. Ha egy korábbi verziót használ, az aktív fiók memóriában van tárolva, ezért minden lapbetöltéskor alaphelyzetbe kell állítani.

Beágyazott alkalmazáshitelesítés

NAA-alkalmazásokhoz, setActiveAccount() és getActiveAccount() NO-OP API-k. Bár a felhasználók beállíthatják és lekérhetik az aktív fiókokat, aktívan figyelmen kívül hagyják őket, mivel a NAA-alkalmazásnak mindig egy fiókkal kell rendelkeznie, és a fiókot a gazdagépalkalmazás accountContextbiztosítja. A jövőben, ha több fiók is támogatott a központokban, ez a viselkedés várhatóan megváltozik.

Notes

  • Az aktuális msal-browser alapértelmezett minta egy működő, egy fiókból álló forgatókönyvvel rendelkezik.
  • Ha több fiókkal rendelkezik, módosítsa a mintát (in handleResponse()) az összes gyorsítótárazott fiók listázásához, és válasszon ki egy adott fiókot.
  • Ha egy alkalmazás az alapján usernameszeretne lekérni egy fiókot, a szűrő API-ban getAccount() való használata username előtt mentenie username kell az api-t (egy login adott felhasználó API-jának válaszából).
  • getAllAccounts() több fiókot ad vissza, ha több interaktív jogkivonat-kérést hajtott végre, és a felhasználó két vagy több ilyen interakcióban különböző fiókokat választott ki. Előfordulhat, hogy át kell adnia prompt: "select_account" az prompt: "login" interaktív acquireToken vagy bejelentkezési API-t ahhoz, hogy Microsoft Entra ID megjeleníthesse a fiókválasztó képernyőt az első interakció után.
  • A fiók API-k a helyi fiók állapotát adják vissza, és nem feltétlenül tükrözik a kiszolgáló állapotát. Olyan fiókokat adnak vissza, amelyek korábban MSAL.js használatával jelentkeztek be az alkalmazásba, és előfordulhat, hogy a kiszolgáló munkamenete aktív vagy nem is aktív.
  • A különböző tartományokban üzemeltetett két alkalmazás nem osztja meg a fiók állapotát, mert a böngésző tárterületét a tartomány segementedi.
  • getAllAccounts() nincs megrendelve, és nem garantáltan ugyanabban a sorrendben van több hívás között
  • A acquireToken vagy bejelentkezési API minden sikeres hívása pontosan egy fiókot ad vissza