Obory a oprávnění na platformě Microsoft Identity Platform
Platforma Microsoft Identity Platform implementuje autorizační protokol OAuth 2.0 . OAuth 2.0 je metoda, prostřednictvím které může aplikace třetí strany přistupovat k prostředkům hostovaným na webu jménem uživatele. Každý webový hostovaný prostředek, který se integruje s platformou Microsoft Identity Platform, má identifikátor prostředku nebo identifikátor URI ID aplikace.
V tomto článku se dozvíte o oborech a oprávněních na platformě Identity Platform.
Následující seznam ukazuje některé příklady prostředků hostovaných na webu Microsoftu:
- Microsoft Graph:
https://graph.microsoft.com
- Rozhraní API pošty Microsoftu 365:
https://outlook.office.com
- Azure Key Vault:
https://vault.azure.net
Totéž platí pro všechny prostředky třetích stran, které jsou integrované s platformou Microsoft Identity Platform. Kterýkoli z těchto prostředků může také definovat sadu oprávnění, která lze použít k rozdělení funkčnosti tohoto prostředku na menší bloky dat. Například Microsoft Graph má definovaná oprávnění k provedení následujících úkolů, mimo jiné:
- Čtení kalendáře uživatele
- Zápis do kalendáře uživatele
- Odeslání pošty jako uživatele
Vzhledem k těmto typům definic oprávnění má prostředek jemně odstupňovanou kontrolu nad svými daty a tím, jak se funkce rozhraní API zveřejňují. Aplikace třetí strany může požádat o tato oprávnění od uživatelů a správců, kteří musí žádost schválit, aby aplikace mohl získat přístup k datům nebo jednat jménem uživatele.
Když se funkce prostředku rozdělí do malých sad oprávnění, dají se aplikace třetích stran vytvořit tak, aby požadovaly jenom oprávnění, která potřebují k provedení své funkce. Uživatelé a správci můžou vědět, k jakým datům má aplikace přístup. A můžou mít větší jistotu, že se aplikace nechová se zlými úmysly. Vývojáři by se měli vždy řídit principem nejnižších oprávnění a požádat pouze o oprávnění, která potřebují pro fungování svých aplikací.
V OAuth 2.0 se těmto typům sad oprávnění říká obory. Často se také označují jako oprávnění. Na platformě Microsoft Identity Platform je oprávnění reprezentováno jako řetězcová hodnota. Aplikace požádá o potřebná oprávnění zadáním oprávnění v parametru scope
dotazu. Platforma Identity Platform podporuje několik dobře definovaných oborů OpenID Connect a oprávnění založená na prostředcích (každé oprávnění je indikováno připojením hodnoty oprávnění k identifikátoru prostředku nebo identifikátoru URI ID aplikace). Řetězec https://graph.microsoft.com/Calendars.Read
oprávnění se například používá k vyžádání oprávnění ke čtení kalendářů uživatelů v Microsoft Graphu.
V požadavcích na autorizační server pro platformu Microsoft Identity Platform, pokud je identifikátor prostředku vynechán v parametru oboru, předpokládá se, že zdrojem je Microsoft Graph. Například scope=User.Read
je ekvivalentní s https://graph.microsoft.com/User.Read
.
Oprávnění omezená správcem
Oprávnění na platformě Microsoft Identity Platform je možné nastavit na omezení správce. Například mnoho oprávnění Microsoft Graphu s vyššími oprávněními vyžaduje schválení správcem. Pokud vaše aplikace vyžaduje oprávnění omezená správcem, musí správce organizace udělit souhlas s těmito obory jménem uživatelů organizace. Následující část obsahuje příklady těchto typů oprávnění:
User.Read.All
: Čtení úplných profilů všech uživatelůDirectory.ReadWrite.All
: Zápis dat do adresáře organizaceGroups.Read.All
: Čtení všech skupin v adresáři organizace
Poznámka:
V žádostech o autorizaci, token nebo koncové body souhlasu pro platformu Microsoft Identity Platform, pokud je identifikátor prostředku vynechán v parametru oboru, předpokládá se, že prostředek je Microsoft Graph. Například scope=User.Read
je ekvivalentní s https://graph.microsoft.com/User.Read
.
I když uživatel příjemce může aplikaci udělit přístup k tomuto druhu dat, uživatelé organizace nemůžou udělit přístup ke stejné sadě citlivých firemních dat. Pokud vaše aplikace požádá o přístup k některému z těchto oprávnění od uživatele organizace, uživateli se zobrazí chybová zpráva s informací, že nemá oprávnění k vyjádření souhlasu s oprávněními vaší aplikace.
Pokud aplikace požádá o oprávnění aplikace a správce udělí tato oprávnění, nebude toto udělení provedeno jménem žádného konkrétního uživatele. Místo toho má klientská aplikace udělená oprávnění přímo. Tyto typy oprávnění by měly používat jenom služby démona a jiné neinteraktivní aplikace, které běží na pozadí. Další informace o scénáři přímého přístupu najdete v tématu Scénáře přístupu na platformě Microsoft Identity Platform.
Podrobný průvodce zveřejněním oborů ve webovém rozhraní API najdete v tématu Konfigurace aplikace pro zveřejnění webového rozhraní API.
Obory OpenID Connect
Implementace platformy Microsoft Identity Platform openID Connect má několik dobře definovaných oborů, které jsou také hostované v Microsoft Graphu: openid
, email
, profile
a offline_access
. Obory address
OpenID Connect a phone
OpenID Connect se nepodporují.
Pokud si vyžádáte obory OpenID Connect a token, získáte token pro volání koncového bodu UserInfo.
Obor openid
Pokud se aplikace přihlásí pomocí OpenID Connect, musí požádat o openid
obor. Obor openid
se zobrazí na stránce souhlasu pracovního účtu jako oprávnění Přihlásit se.
Pomocí tohoto oprávnění může aplikace obdržet jedinečný identifikátor uživatele ve formě sub
deklarace identity. Oprávnění také aplikaci poskytuje přístup ke koncovému bodu UserInfo. Obor openid
se dá použít na koncovém bodu tokenu Microsoft Identity Platform k získání tokenů ID. Aplikace může tyto tokeny použít k ověřování.
Obor email
Obor email
lze použít s oborem openid
a všemi dalšími obory. Aplikace získá přístup k primární e-mailové adrese uživatele ve formě email
deklarace identity.
Deklarace email
identity je součástí tokenu pouze v případě, že je e-mailová adresa přidružená k uživatelskému účtu, což není vždy případ. Pokud vaše aplikace používá email
obor, musí být aplikace schopná zpracovat případ, ve kterém v tokenu neexistuje žádná email
deklarace identity.
Obor profile
Obor profile
lze použít s oborem a jakýmkoli jiným oborem openid
. Poskytuje aplikaci přístup k velkému množství informací o uživateli. Informace, ke které má přístup, patří, ale nikoli pouze na jméno uživatele, příjmení, upřednostňované uživatelské jméno a ID objektu.
Úplný seznam profile
deklarací identity dostupných v parametru id_tokens
pro konkrétního uživatele najdete v referenčních informacíchid_tokens
.
Obor offline_access
Rozsah offline_access
poskytuje aplikaci přístup k prostředkům jménem uživatele po delší dobu. Na stránce souhlasu se tento obor zobrazí jako Přístup k datům, která jste mu udělili přístup k oprávněním.
Když uživatel rozsah schválí offline_access
, může vaše aplikace přijímat obnovovací tokeny z koncového bodu tokenu platformy Microsoft Identity Platform. Obnovovací tokeny jsou dlouhodobé. Vaše aplikace může získat nové přístupové tokeny, protože vyprší platnost starších přístupových tokenů.
Poznámka:
Toto oprávnění se aktuálně zobrazuje na všech stránkách souhlasu, i pro toky, které neposkytují obnovovací token (například implicitní tok). Toto nastavení řeší scénáře, kdy klient může začít v rámci implicitního toku, a pak přejde do toku kódu, kde se očekává obnovovací token.
Na platformě Microsoft Identity Platform (požadavky na koncový bod v2.0) musí vaše aplikace explicitně požádat o offline_access
rozsah, aby přijímala obnovovací tokeny. Když tedy uplatníte autorizační kód v toku autorizačního kódu OAuth 2.0, obdržíte z koncového /token
bodu pouze přístupový token.
Přístupový token je obvykle platný přibližně jednu hodinu. V tomto okamžiku musí vaše aplikace přesměrovat uživatele zpět na /authorize
koncový bod a požádat o nový autorizační kód. Během tohoto přesměrování a v závislosti na typu aplikace může uživatel muset znovu zadat své přihlašovací údaje nebo znovu udělit souhlas s oprávněními.
Platnost obnovovacího tokenu je delší než přístupový token a obvykle je platná po dobu jednoho dne. Další informace o získání a používání obnovovacích tokenů najdete v referenčních informacích k protokolu Microsoft Identity Platform.
Zahrnutí obnovovacího tokenu do odpovědi může záviset na několika faktorech, včetně konkrétní konfigurace vaší aplikace a oborů požadovaných během procesu autorizace. Pokud očekáváte, že v odpovědi obdržíte obnovovací token, ale nepodaří se vám, zvažte následující faktory:
- Požadavky na obor: Ujistěte se, že požadujete
offline_access
obory spolu s dalšími nezbytnými obory. - Typ udělení autorizace: Obnovovací token se obvykle poskytuje při použití typu udělení autorizačního kódu. Pokud se váš tok liší, může to mít vliv na odpověď.
- Konfigurace klienta: Zkontrolujte nastavení vaší aplikace na platformě Identity Platform. Některé konfigurace můžou omezit vystavování refresh_tokens.
Obor .default
Obor .default
se používá k obecnému odkazování na službu prostředků (API) v požadavku bez identifikace konkrétních oprávnění. V případě potřeby je nutné použít signály, .default
které by měly být vyzvány k zadání všech požadovaných oprávnění uvedených v registraci aplikace (pro všechna rozhraní API v seznamu).
Hodnota parametru oboru je vytvořena pomocí identifikátoru URI prostředku a .default
oddělené lomítkem (/
). Pokud je například identifikátor URI https://contoso.com
prostředku , rozsah požadavku je https://contoso.com/.default
. V případech, kdy je nutné zadat druhé lomítko pro správné vyžádání tokenu, najdete v části o koncových lomítkách.
Použití scope={resource-identifier}/.default
je funkčně stejné jako resource={resource-identifier}
v koncovém bodu verze 1.0 (kde {resource-identifier}
je identifikátor URI pro rozhraní API, například https://graph.microsoft.com
pro Microsoft Graph).
Obor .default
je možné použít v jakémkoli toku OAuth 2.0 a zahájit souhlas správce. Jeho použití se vyžaduje v toku On-Behalf-Of a toku přihlašovacích údajů klienta.
Klienti nemůžou v jediné žádosti kombinovat statický.default
souhlas () a dynamický souhlas. Výsledkem je scope=https://graph.microsoft.com/.default Mail.Read
chyba, protože kombinuje typy oborů.
.default
pokud uživatel již udělil souhlas
Parametr .default
oboru aktivuje výzvu k vyjádření souhlasu pouze v případě, že nebyl udělen souhlas s delegovaným oprávněním mezi klientem a prostředkem jménem přihlášeného uživatele.
Pokud existuje souhlas, vrácený token obsahuje všechny obory udělené pro tento prostředek pro přihlášeného uživatele. Pokud však není pro požadovaný prostředek uděleno žádné oprávnění (nebo pokud prompt=consent
byl parametr poskytnut), zobrazí se výzva k vyjádření souhlasu pro všechna požadovaná oprávnění nakonfigurovaná pro registraci klientské aplikace pro všechna rozhraní API v seznamu.
Pokud je například požadován obor https://graph.microsoft.com/.default
, vaše aplikace požaduje přístupový token pro rozhraní Microsoft Graph API. Pokud pro Microsoft Graph byl udělen alespoň jedno delegované oprávnění jménem přihlášeného uživatele, bude přihlášení pokračovat a všechna delegovaná oprávnění Microsoft Graphu udělená pro tohoto uživatele budou zahrnuta do přístupového tokenu. Pokud pro požadovaný prostředek (v tomto příkladu Microsoft Graphu) nebyla udělena žádná oprávnění, zobrazí se výzva k vyjádření souhlasu pro všechna požadovaná oprávnění nakonfigurovaná v aplikaci pro všechna rozhraní API v seznamu.
Příklad 1: Uživatel nebo správce tenanta udělil oprávnění
V tomto příkladu uživatel nebo správce tenanta udělil Mail.Read
klientovi oprávnění a User.Read
oprávnění Microsoft Graphu.
Pokud klient požádá scope=https://graph.microsoft.com/.default
, nezobrazí se žádná výzva k vyjádření souhlasu bez ohledu na obsah registrovaných oprávnění klientské aplikace pro Microsoft Graph. Vrácený token obsahuje obory Mail.Read
a User.Read
.
Příklad 2: Uživatel nemá udělená oprávnění mezi klientem a prostředkem
V tomto příkladu uživatel neudělil souhlas mezi klientem a Microsoft Graphem ani nemá správce. Klient zaregistroval oprávnění User.Read
a Contacts.Read
. Zaregistrovala se také pro obor https://vault.azure.net/user_impersonation
služby Azure Key Vault.
Když klient požádá o token scope=https://graph.microsoft.com/.default
, zobrazí se uživateli stránka se souhlasem pro Microsoft Graph User.Read
a Contacts.Read
obory a obor služby Azure Key Vault user_impersonation
. Vrácený token obsahuje pouze obory User.Read
a Contacts.Read
dá se použít pouze pro Microsoft Graph.
Příklad 3: Uživatel souhlasil a klient požaduje více oborů.
V tomto příkladu už uživatel souhlasil Mail.Read
s klientem. Klient je zaregistrovaný Contacts.Read
pro obor.
Klient nejprve provede přihlášení pomocí scope=https://graph.microsoft.com/.default
. Na scopes
základě parametru odpovědi kód aplikace zjistí, že byl udělen pouze Mail.Read
. Klient pak zahájí druhé přihlášení pomocí scope=https://graph.microsoft.com/.default
, a tentokrát vynutí souhlas pomocí prompt=consent
. Pokud má uživatel povoleno souhlas se všemi oprávněními, která aplikace zaregistrovala, zobrazí se výzva k vyjádření souhlasu. (Pokud ne, zobrazí se jim chybová zpráva nebo formulář žádosti o souhlas správce.) Mail.Read
V příkazovém řádku k vyjádření souhlasu se zobrazí obojíContacts.Read
. Pokud je udělen souhlas a přihlášení pokračuje, vrátí se token pro Microsoft Graph a obsahuje Mail.Read
a Contacts.Read
.
.default
Použití oboru s klientem
V některých případech si klient může vyžádat vlastní .default
obor. Následující příklad ukazuje tento scénář.
// Line breaks are for legibility only.
GET https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
?response_type=token //Code or a hybrid flow is also possible here
&client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=9ada6f8a-6d83-41bc-b169-a306c21527a5/.default
&redirect_uri=https%3A%2F%2Flocalhost
&state=1234
Tento příklad kódu vytvoří stránku souhlasu pro všechna registrovaná oprávnění, pokud předchozí popis souhlasu a .default
použije se pro tento scénář. Pak kód vrátí id_token
místo přístupového tokenu .
Toto nastavení by neměli používat noví klienti, kteří cílí na platformu Microsoft Identity Platform. Nezapomeňte migrovat do knihovny Microsoft Authentication Library (MSAL) ze služby Azure AD Authentication Library (ADAL).
Tok udělení přihlašovacích údajů klienta a .default
Dalším použitím .default
je vyžádání rolí aplikací (označovaných také jako oprávnění aplikace) v neinteraktivní aplikaci, jako je aplikace démona, která používá tok udělení přihlašovacích údajů klienta k volání webového rozhraní API.
Pokud chcete definovat role aplikací (oprávnění aplikace) pro webové rozhraní API, přečtěte si téma Přidání rolí aplikace do aplikace.
Požadavky na přihlašovací údaje klienta ve vaší klientské službě musí obsahovat scope={resource}/.default
. Tady je webové rozhraní API, {resource}
pro které vaše aplikace hodlá volat, a chce získat přístupový token pro. Vydání žádosti o přihlašovací údaje klienta pomocí jednotlivých oprávnění aplikace (rolí) se nepodporuje . Všechny role aplikace (oprávnění aplikace), které byly uděleny pro toto webové rozhraní API, jsou zahrnuty do vráceného přístupového tokenu.
Pokud chcete udělit přístup k rolím aplikace, které definujete, včetně udělení souhlasu správce pro aplikaci, přečtěte si téma Konfigurace klientské aplikace pro přístup k webovému rozhraní API.
Koncové lomítko a .default
Některé identifikátory URI prostředků mají koncové lomítko, https://contoso.com/
například na rozdíl od https://contoso.com
. Koncové lomítko může způsobit problémy s ověřením tokenu. K problémům dochází především v případě, že se vyžaduje token pro Azure Resource Manager (https://management.azure.com/
).
V tomto případě koncové lomítko na identifikátoru URI prostředku znamená, že lomítko musí být k dispozici při vyžádání tokenu. Takže když požádáte o token pro https://management.azure.com/
použití .default
, musíte požádat https://management.azure.com//.default
(všimněte si dvojité lomítko!).
Obecně platí, že pokud ověříte, že se token vydává, a pokud je token odmítnut rozhraním API, které by ho mělo přijmout, zvažte přidání druhého lomítka a akci opakujte.