Získání a použití přístupového tokenu

Před získáním přístupového tokenu se ujistěte, že rozumíte tomu, jak inicializovat objekt aplikace. Je také důležité pochopit vztah mezi přístupovými tokeny a prostředky.

V MSAL můžete získat přístupové tokeny pro rozhraní API, která vaše aplikace potřebuje k volání pomocí acquireToken* metod poskytovaných knihovnou. Metody acquireToken* abstrahují 2 kroky, které se týkají získání tokenů pomocí toku autorizačního kódu OAuth 2.0:

  1. odešlete požadavek službě Microsoft Entra ID, abyste získali authorization code
  2. vyměnit tento kód za přístupový token obsahující rozsahy, s nimiž uživatel vyjádřil souhlas

Získání přístupového tokenu

Volba typu interakce

Podívejte se zde , pokud si nejste jisti rozdíly mezi acquireTokenRedirect a acquireTokenPopup.

Příprava objektu požadavku

Do rozhraní acquireToken* musíte předat objekt požadavku. Tento objekt umožňuje použít v požadavku různé parametry. Další informace o parametrech objektu požadavku naleznete zde. Rozsahy jsou vyžadovány u všech volání acquireToken*.

Kontrola mezipaměti

Knihovna MSAL používá mezipaměť k ukládání tokenů na základě konkrétních parametrů, jako jsou rozsahy, zdroj a autorita, a v případě potřeby token z mezipaměti načte. Může také provést bezobslužné prodlužování platnosti těchto tokenů, když vypršela jejich platnost. Knihovna MSAL tuto funkci zpřístupňuje prostřednictvím metody acquireTokenSilent.

Po přihlášení pomocí některého z ssoSilentlogin* rozhraní API bude mezipaměť obsahovat sadu ID, přístup a obnovovací tokeny. Pokaždé, když potřebujete přístupový token, měli byste volat acquireTokenSilent a v případě selhání volání interaktivního rozhraní API. acquireTokenSilent vyhledá platný token v mezipaměti a pokud se blíží vypršení platnosti nebo neexistuje, pokusí se ho automaticky aktualizovat pomocí obnovovacího tokenu uloženého v mezipaměti. Další informace o použití acquireTokenSilent najdete tady.

var request = {
    scopes: ["User.Read"],
};

msalInstance.acquireTokenSilent(request).then(tokenResponse => {
    // Do something with the tokenResponse
}).catch(async (error) => {
    if (error instanceof InteractionRequiredAuthError) {
        // fallback to interaction when silent call fails
        return msalInstance.acquireTokenPopup(request);
    }

    // handle other errors
})

Přesměrování

var request = {
    scopes: ["User.Read"],
};

msalInstance.acquireTokenSilent(request).then(tokenResponse => {
    // Do something with the tokenResponse
}).catch(error => {
    if (error instanceof InteractionRequiredAuthError) {
        // fallback to interaction when silent call fails
        return msalInstance.acquireTokenRedirect(request)
    }

    // handle other errors
});

Použití přístupového tokenu

Jakmile přístupový token získáte, musíte ho zahrnout do hlavičky Authorization jako token typu Bearer v požadavku na prostředek, pro který jste token získali, jak je znázorněno níže:

var headers = new Headers();
var bearer = "Bearer " + tokenResponse.accessToken;
headers.append("Authorization", bearer);
var options = {
        method: "GET",
        headers: headers
};
var graphEndpoint = "https://graph.microsoft.com/v1.0/me";

fetch(graphEndpoint, options)
    .then(resp => {
        //do something with response
    });

Osvědčené postupy pro získávání tokenů MSAL

Níže jsou uvedeny osvědčené postupy pro získávání tokenů pomocí MSAL, které pomáhají předcházet chybám, dopadům na výkon a problémům s použitelností. Některé scénáře můžou poskytovat výjimky.

Použití jedné instance PublicClientApplication

Vytvořte pro každou aplikaci jednu instanci PublicClientApplication a používejte stejnou instanci v celé aplikaci. Tím se zajistí, že existuje jediný zdroj pravdy pro to, co MSAL provádí v libovolném okamžiku (viz: události MSAL) a eliminuje pravděpodobnost, že různé objekty aplikace vytvářejí paralelní interaktivní požadavky nebo potenciální konflikty mezipaměti, které můžou narušit aplikace, snížit výkon nebo bránit uživatelskému prostředí.

Vždy počkejte, až se sliby vyřeší.

Všechny rozhraní MSAL acquireToken* i login* rozhraní API provádějí asynchronní operace a vrací přísliby. Před provedením jakýchkoli dalších úloh, které závisí na stavu ověřování nebo tokenech, jako je vykreslování informací o uživateli, volání chráněného rozhraní API nebo volání jiných rozhraní MSAL API, byste měli vždy počkat na vyřešení těchto slibů.

Nejprve zkuste tichý požadavek, poté interaktivní požadavek

Při vyžadování tokenů vždy nejprve použijte acquireTokenSilent a v případě potřeby přejděte na interaktivní získání tokenu (např. když dojde k vyvolání výjimky InteractionRequiredAuthError).

Souběžné tiché požadavky jsou povolené. Pokud jsou současně provedeny dva nebo více tichých požadavků, do sítě se odešle pouze jeden (je-li to nutné), odpověď však obdrží všechny, pokud mají stejné parametry požadavku (např. scopes).

Souběžné interaktivní požadavky nejsou povoleny. Pokud jsou souběžně provedeny dva nebo více interaktivních požadavků, spustí se interakce pouze první z nich, zatímco zbytek selže s interaction_in_progress chybou. Doporučujeme seznámit se s touto chybou a možnými nápravnými prostředky, abyste se vyhnuli jejímu výskytu ve vašich aplikacích.

Vytvořte jeden požadavek na token pro každý prostředek

Přístupové tokeny můžete požadovat pouze pro jeden prostředek najednou (viz prostředky a obory). V případě potřeby můžete požádat uživatele o souhlas s obory (oprávněními) požadovanými více prostředky pomocí extraScopesToConsent parametru v objektu požadavku. Přístupové tokeny pro dříve odsouhlasené obory je možné získat bezobslužně.

Další kroky