Příklad rozhraní API chráněného rozhraním Microsoft Identity Consent Framework

Tento článek vám jako vývojář může pomoct navrhnout strategii oprávnění aplikace tak, aby poskytovala nejnižší oprávnění. Než budete pokračovat, přečtěte si článek o ochraně rozhraní API a seznamte se s osvědčenými postupy pro registraci, oprávnění a přístup.

Pojďme se podívat, jak rozhraní API, které je chráněné platformou Microsoft Identity Platform, používá rozhraní Microsoft Identity Consent Framework. Jako příklad používáme rozhraní Microsoft Graph API, protože využívá nejrozsáhlejší architekturu pro vyjádření souhlasu platformy Microsoft Identity Platform.

Konvence pojmenování názvů oprávnění

Tým Microsoft Graphu vytvořil konvenci vytváření názvů pro názvy oprávnění, aby bylo snazší připojit oprávnění k přístupu k prostředku, který oprávnění povolí. Názvy oprávnění Microsoft Graphu odpovídají jednoduchému vzoru resource.operation.constraint . Dvě primární operace jsou Read a ReadWrite (včetně aktualizace a odstranění).

Prvek omezení ovlivňuje stupeň přístupu, který má vaše aplikace v adresáři. Microsoft Graph podporuje tato omezení:

  • Všechny uděluje vaší aplikaci oprávnění k provádění operací se všemi prostředky zadaného typu v adresáři.
  • Sdílené uděluje vaší aplikaci oprávnění k provádění operací s prostředky, které jiní uživatelé sdíleli s přihlášeným uživatelem.
  • AppFolder uděluje vaší aplikaci oprávnění ke čtení a zápisu souborů ve vyhrazené složce na OneDrivu. Toto omezení je vystaveno pouze u objektu oprávnění Soubory a je platné pouze pro účty Microsoft.
  • Pokud zadáte Žádné omezení, aplikace může provádět pouze operace s prostředky, které vlastní přihlášený uživatel.

Přístup a operace vůči konkrétním prostředkům

Pojďme se podívat na některá oprávnění nebo obory pro objekt uživatele v Microsoft Graphu a podívat se, jak návrháři rozhraní Microsoft API povolili konkrétní přístup a operace s konkrétními prostředky:

Povolení Zobrazovaný řetězec Description
User.Read Přihlášení a čtení profilu uživatele Umožňuje uživatelům přihlásit se k aplikaci a umožní aplikaci číst profil přihlášených uživatelů. Umožňuje také aplikaci číst základní firemní informace přihlášených uživatelů.
User.ReadWrite Přístup pro čtení a zápis k profilu uživatele Umožňuje aplikaci číst úplný profil přihlášeného uživatele. Umožňuje také aplikaci aktualizovat profilové informace přihlášeného uživatele jeho jménem.

User.Read a User.ReadWrite existují (na rozdíl od jediného oprávnění, jako User.Access, které neexistuje), aby aplikace mohly dodržovat princip nulové důvěry s principem nejmenších oprávnění. Pokud vývojář nemá požadavek a kód pro aktualizaci profilu uživatele, aplikace o to nepožádá User.ReadWrite. Proto zlomyslný uživatel nemůže převzít kontrolu nad aplikací a použít ji ke změně dat.

Všimněte si, že User.Read aplikaci nedává jenom přístup k objektu uživatele. Každé oprávnění představuje konkrétní rozsah operací. Je důležité, aby vývojáři a správci přečetli popis oprávnění, aby přesně viděli, co konkrétní oprávnění umožňuje. User.Read, kromě povolení čtení celého profilu aktuálního uživatele umožňuje aplikaci zobrazit základní informace z objektu Organizace v Microsoft Graphu.

Pojďme se podívat na další oprávnění:

Povolení Zobrazovaný řetězec Description
User.ReadBasic.All Čtení základních profilů všech uživatelů Umožňuje aplikaci číst základní sadu vlastností profilu jiných uživatelů ve vaší organizaci jménem přihlášeného uživatele. Zahrnuje zobrazované jméno, křestní jméno a příjmení, e-mailovou adresu, otevřené rozšíření a fotografii. Umožňuje aplikaci číst úplný profil přihlášeného uživatele.

Rozsah operací, který zahrnuje vše, co User.ReadBasic.All a User.Read dělají. Kromě toho máte přístup k zobrazovanému jménu, křestnímu jménu a jménu rodiny, e-mailové adrese, fotce a otevřeným rozšířením pro ostatní uživatele organizace. Konkrétní rozsah operací umožňuje aplikacím mít pěkné uživatelské rozhraní pro výběr lidí a je příkladem návrhářů rozhraní API, kteří používají oprávnění k povolení konkrétního rozsahu operací.

Podívejme se na několik dalších oprávnění k objektu uživatele Microsoft Graphu:

Povolení Zobrazovaný řetězec Description
User.Read.All Čtení úplných profilů všech uživatelů Umožňuje aplikaci číst celou sadu vlastností profilu, sestav a správců jiných uživatelů ve vaší organizaci jménem přihlášeného uživatele.
User.ReadWrite.All Čtení a zápis celých profilů všech uživatelů Umožňuje aplikaci číst a zapisovat úplnou sadu vlastností profilů, zpráv a manažerů ostatních uživatelů ve vaší organizaci jménem přihlášeného uživatele. Umožňuje také aplikaci vytvářet a odstraňovat uživatele a resetovat hesla uživatelů jménem přihlášeného uživatele.

Stejně jako u User.Read a User.ReadWrite, User.Read.All a User.ReadWrite.All jsou jedinečná oprávnění, která aplikaci umožňují dodržovat princip nulové důvěry s minimálními oprávněními.

User.Read.All je zajímavé, protože každý uživatel v organizaci má tuto schopnost (například otevřít Outlook, navigovat nahoru a dolů po hierarchii reportingu). Jako jednotlivec uvidíte úplný profil uživatele všech ostatních uživatelů ve vaší organizaci. Návrháři rozhraní Microsoft Graph API se ale rozhodli, že pouze administrátoři by měli aplikaci povolit provedení téže operace, protože User.Read.All zahrnuje organizační hierarchii nájemce. Pokud k těmto informacím přistoupil útočník, mohl by spustit cílený phishingový útok, ve kterém by phishingový e-mail pocházel od nadřízeného osoby nebo manažera jejího nadřízeného.

User.ReadWrite.All je výkonný rozsah operací. Aplikace s tímto oprávněním může aktualizovat nebo dokonce odstranit každého uživatele v tenantovi. Když je uživatel před aplikací, může aplikace jako delegovaná oprávnění provádět jenom to, co může aktuální uživatel dělat. Běžní uživatelé nemůžou aktualizovat ani odstraňovat jiné uživatele bez ohledu na oprávnění aplikace. Pokud ale správce tenanta aplikaci použije, může tyto operace provádět. Když se rozhodnete udělit nebo odepřít toto oprávnění, vyhodnoťte aplikaci s ohledem na uživatele správce tenanta.

Vzhledem k výkonu User.Read.All a User.ReadWrite.All určili návrháři rozhraní API Microsoft Graph tato oprávnění jako vyžadující souhlas správce. Pojďme přidat sloupec Správce? do naší tabulky oprávnění, abychom označili, kdy oprávnění vyžaduje souhlas správce:

Povolení Zobrazovaný řetězec Description Admin?
User.Read Přihlášení a čtení profilu uživatele Umožňuje uživatelům přihlásit se k aplikaci a umožní aplikaci číst profil přihlášených uživatelů. Umožňuje také aplikaci číst základní firemní informace přihlášených uživatelů. Ne
User.ReadWrite Přístup pro čtení a zápis k profilu uživatele Umožňuje aplikaci číst úplný profil přihlášeného uživatele. Umožňuje také aplikaci aktualizovat profilové informace přihlášeného uživatele jeho jménem. Ne
User.ReadBasic.All Čtení základních profilů všech uživatelů Umožňuje aplikaci číst základní sadu vlastností profilu jiných uživatelů ve vaší organizaci jménem přihlášeného uživatele. Zahrnuje zobrazované jméno, křestní jméno a příjmení, e-mailovou adresu, otevřené rozšíření a fotografii. Umožňuje aplikaci číst úplný profil přihlášeného uživatele. Ne
User.Read.All Čtení úplných profilů všech uživatelů Umožňuje aplikaci číst celou sadu vlastností profilu, sestav a správců jiných uživatelů ve vaší organizaci jménem přihlášeného uživatele. Ano
User.ReadWrite.All Čtení a zápis celých profilů všech uživatelů Umožňuje aplikaci číst a zapisovat úplnou sadu vlastností profilů, zpráv a manažerů ostatních uživatelů ve vaší organizaci jménem přihlášeného uživatele. Umožňuje také aplikaci vytvářet a odstraňovat uživatele a resetovat hesla uživatelů jménem přihlášeného uživatele. Ano

Jak je uvedeno v článku Vyžádání oprávnění, která vyžadují souhlas správce, mohou správci tenanta ignorovat požadavky a označit libovolná nebo všechna oprávnění aplikace ve svém tenantovi jako vyžadující souhlas správce. Navrhněte aplikaci tak, aby elegantně zpracovávala situaci, kdy neobdržíte token z vašeho požadavku. Nedostatek souhlasu je jedním z mnoha důvodů, proč vaše aplikace nemusí dostat token.

Další kroky