Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Microsoft identity platform využívá pro přístup k prostředkům model orientovaný na obor. V tomto případě prostředek odkazuje na libovolnou aplikaci, která může být příjemcem přístupového tokenu (například MS Graph API nebo vlastního webového rozhraní API) a obor (neboli "oprávnění") odkazuje na jakýkoli aspekt prostředku, který přístupový token uděluje práva.
Žádosti o přístupový token v MSAL.js jsou určené pro jednotlivé prostředky a rozsahy. To znamená, že přístupový token požadovaný pro prostředek A s rozsahem scp1:
- nelze použít pro přístup k prostředku A s rozsahem
scp2a, - nelze použít pro přístup k prostředku B v libovolném rozsahu.
Zamýšlený příjemce přístupového tokenu je reprezentován aud deklarací identity. V případě, že hodnota aud deklarace neodpovídá identifikátoru URI ID APLIKACE prostředku, měl by být token považován za neplatný. Podobně jsou oprávnění, která přístupový token uděluje, vyjádřena nárokem scp. Další informace najdete v tématu Deklarace identity přístupového tokenu .
Výchozí obory
Ve výchozím nastavení MSAL.js přidá ke každému požadavku oprávnění openid, profile a offline_access. Tyto rozsahy oprávnění jsou vyžadovány k získání tokenu pro obnovení a atributů v ID tokenu, které se používají k naplnění objektu účtu informacemi o uživateli.
Práce s více zdroji
Pokud potřebujete získat přístup k více prostředkům, zahajte pro každý z nich samostatný požadavek na token:
// "User.Read" stands as shorthand for "graph.microsoft.com/User.Read"
const graphToken = await msalInstance.acquireTokenSilent({
scopes: [ "User.Read" ]
});
const customApiToken = await msalInstance.acquireTokenSilent({
scopes: [ "api://<myCustomApiClientId>/My.Scope" ]
});
Mějte na paměti, že pro stejný prostředek můžete požádat o více rozsahů (např. User.Read, User.Write a Calendar.Read pro MS Graph API).
const graphToken = await msalInstance.acquireTokenSilent({
scopes: [ "User.Read", "User.Write", "Calendar.Read" ] // all MS Graph API scopes
});
V případě, že v žádosti o token omylem předáte více prostředků, bude token, který obdržíte, vystaven pouze pro první prostředek.
// you will only receive a token for MS GRAPH API's "User.Read" scope here
const myToken = await msalInstance.acquireTokenSilent({
scopes: [ "User.Read", "api://<myCustomApiClientId>/My.Scope" ]
});
Dynamické obory a přírůstkový souhlas
V Microsoft Entra ID se obory (oprávnění) nastavené přímo na registraci aplikace nazývají statické obory. Jiné obory, které jsou definovány pouze v kódu, se nazývají dynamické obory. To má dopad na metody login (tj. loginPopup, loginRedirect) a acquireToken (tj. acquireTokenPopup, acquireTokenRedirect, acquireTokenSilent) v knihovně MSAL.js. Rozmyslete si:
const loginRequest = {
scopes: [ "openid", "profile", "User.Read" ]
};
const tokenRequest = {
scopes: [ "Mail.Read" ]
};
// will return an ID Token and an Access Token with scopes: "openid", "profile" and "User.Read"
msalInstance.loginPopup(loginRequest);
// will fail and fallback to an interactive method prompting a consent screen
// after consent, the received token will be issued for "openid", "profile" ,"User.Read" and "Mail.Read" combined
msalInstance.acquireTokenSilent(tokenRequest);
Ve výše uvedeném fragmentu kódu se uživateli zobrazí výzva k vyjádření souhlasu po ověření a přijetí tokenu ID a přístupového tokenu s oborem User.Read. Později, pokud požádá o přístupový token pro User.Read, nebudou znovu požádáni o souhlas (jinými slovy, mohou získat token bezobslužně).
Na druhé straně uživatel neudělil souhlas s Mail.Read fází ověřování, proto bude požádán o souhlas při vyžádání přístupového tokenu pro Mail.Read obor. Přijatý token bude obsahovat všechny dříve odsouhlasené obory (pro tento konkrétní prostředek), proto termín přírůstkový souhlas.
Zvažte trochu jiný případ:
const loginRequest = {
scopes: [ "openid", "profile", "User.Read" ],
extraScopesToConsent: [ "api://<myCustomApiClientId>/My.Scope"]
};
const tokenRequest = {
scopes: [ "Mail.Read" ]
};
const anotherTokenRequest = {
scopes: [ "api://<myCustomApiClientId>/My.Scope" ]
}
// will return an ID Token and an Access Token with scopes: "openid", "profile" and "User.Read"
msalInstance.loginPopup(loginRequest);
// will fail with InteractionRequiredError due to lack of consent for "Mail.Read" scope. You should fallback to an interactive method in this case.
msalInstance.acquireTokenSilent(tokenRequest);
// will succeed and return an Access Token with scope "api://<myCustomApiClientId>/My.Scope"
msalInstance.acquireTokenSilent(anotherTokenRequest);
Ve výše uvedeném fragmentu kódu uživatel, i když souhlasí s oběma oprávněními User.Read a api://<myCustomApiClientId>/My.Scope, obdrží přístupový token pouze pro rozhraní MS Graph API v souladu s principem jednoho prostředku pro každý rozsah oprávnění. Nicméně, protože již udělili souhlas s api://<myCustomApiClientId>/My.Scope, mohou později pro tento prostředek/rozsah získat přístupový tokenbez zásahu uživatele.
Životnost souhlasu
V Microsoft Entra ID žije souhlas nad rámec životnosti aplikace. To znamená, že když požádáte o přístupový token pro prostředek, vrátí se všechny obory, se kterými jste dříve souhlasili, bez ohledu na to, jaký rozsah byl v danou chvíli požadován. Jinými slovy, pokud souhlasíte s User.Read a Mail.Read dnes a spustíte novou instanci vaší aplikace, která zítra požádá pouze o přístupový tokenUser.Read, stále obdržíte token vystavený pro obojíUser.Read i Mail.Read. Další informace najdete v tématu Oprávnění a Souhlas.