Autorizace přístupu k rozhraním API pomocí knihovny Microsoft Authentication Library

Dokončeno

Teď se můžete přihlásit k webové aplikaci uživatelům vaší společnosti. Dále chcete zobrazit informace, jako je jejich pracovní pozice, pracovní e-mail atd. z profilu zaměstnance na stránce. Zjistíte, že rozhraní Microsoft Graph API poskytuje přístup k datům souvisejícím s uživateli.

V této lekci se dozvíte, jak vám MSAL může pomoct získat autorizovaný přístup k služby Microsoft, jako je rozhraní Microsoft Graph API.

Oprávnění a obory rozhraní API

Webové služby zabezpečené pomocí Microsoft Entra ID definují sadu oprávnění, která poskytují přístup k funkcím rozhraní API a datům, která služba zveřejňuje. Aplikace může požádat o tato oprávnění od uživatelů a správců, kteří musí žádost schválit, aby aplikace nemohla získat přístup k datům nebo jednat jménem uživatele. 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

Uživatelé a správci můžou řídit a vědět, k jakým datům má aplikace přístup. Než bude vaše aplikace mít přístup k rozhraní API zabezpečenému Microsoftem, musíte k provedení akcí poskytnout oprávnění aplikace.

Microsoft Entra ID podporuje dva typy oprávnění: delegovaná oprávnění a oprávnění aplikace.

  • Delegovaná oprávnění používají aplikace, ve kterých je přihlášený uživatel. U těchto aplikací může aplikaci udělit souhlas s požadovanými oprávněními uživatel nebo správce. Aplikace má delegovaná oprávnění k tomu, aby fungovala jako přihlášený uživatel při volání cílového rozhraní API. Některá vysoce privilegovaná oprávnění vyžadují souhlas správce.

  • Oprávnění aplikace používají aplikace, které běží bez přihlášeného uživatele, například aplikace, které běží jako služby na pozadí nebo démony. Souhlas s oprávněními aplikace může udělit pouze správce.

Tato oprávnění rozhraní API můžete přiřadit k registraci aplikace z webu Azure Portal.

Rozsahy

Microsoft Entra ID implementuje autorizační protokol OAuth 2.0, prostřednictvím kterého může aplikace přistupovat k webovým prostředkům hostovaným jménem uživatele.

V OAuth 2.0 se těmto typům sad oprávnění říká obory. Při vytváření žádosti o autorizaci pro Microsoft Entra ID aplikace požádá o oprávnění, která potřebuje, zadáním oprávnění v parametru scope dotazu požadavku. Například hodnota https://graph.microsoft.com/Calendars.Read oboru se používá k vyžádání oprávnění ke čtení kalendářů uživatele v Microsoft Graphu.

Získání přístupových tokenů pomocí MSAL

Přístupové tokeny umožňují klientským aplikacím bezpečně volat webová rozhraní API chráněná id Microsoft Entra. Přístupový token můžete získat několika způsoby pomocí knihovny MSAL (Microsoft Authentication Library). Obecně platí, že metoda používaná k získání tokenu závisí na tom, jestli je aplikace veřejná klientská aplikace, jako je desktopová nebo mobilní aplikace, nebo důvěrná klientská aplikace, jako je webová aplikace, webové rozhraní API nebo aplikace démona.

Několik metod získání tokenu MSAL vyžaduje scopes parametr, což je seznam řetězců, které deklarují požadovaná oprávnění a požadované prostředky.

Služba MSAL uloží token do mezipaměti po jeho získání. U webových aplikací, které používají tok autorizačního kódu OpenID Connect, je doporučený vzor v kontrolerů:

  • Nejprve se pokuste získat token bezobslužně z mezipaměti před pokusem o získání tokenu jinými prostředky. Následující kód je výňatek z implementace acquireTokenSilently metody ve AuthHelper třídě.

    final SilentParameters parameters = SilentParameters
                                            .builder(Collections.singleton(Config.SCOPES), context.getAccount())
                                            .build();
    
    final ConfidentialClientApplication client = getConfidentialClientInstance();
    
    client.tokenCache().deserialize(context.getTokenCache());
    
    final IAuthenticationResult result = client.acquireTokenSilently(parameters).get();
    
  • Pokud v mezipaměti není žádný token a požadavek na bezobslužný token se nepodaří získat, můžete token získat pomocí toku autorizačního kódu:

    final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
                                                        .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES))
                                                        .build();
    
    final IAuthenticationResult result = app.acquireToken(authParams).get();
    

Služba MSAL také dokáže aktualizovat token, když se blíží vypršení platnosti (protože mezipaměť tokenů obsahuje také obnovovací token).

Výsledky ověřování

Když klient požádá o přístupový token, vrátí ID Microsoft Entra také výsledek ověřování, který obsahuje metadata o přístupovém tokenu. Tato data umožňují vaší aplikaci provádět inteligentní ukládání přístupových tokenů do mezipaměti, aniž by bylo nutné analyzovat samotný přístupový token. Knihovna AuthenticationResult MSAL vrátí zveřejnění:

  • Přístupový token pro webové rozhraní API.
  • Token ID pro uživatele (JWT).
  • Vypršení platnosti tokenu sděluje datum a čas vypršení platnosti tokenu.
  • ID tenanta obsahuje tenanta, ve kterém byl uživatel nalezen.
  • Obory, pro které byl token vystaven.
  • Jedinečné ID uživatele.

Úvod do Microsoft Graphu

Rozhraní Microsoft Graph API nabízí jeden koncový bod, https://graph.microsoft.comkterý poskytuje přístup k bohatým datům a přehledům orientovaným na lidi v cloudu Microsoftu. Pomocí rozhraní REST API nebo sad SDK můžete získat přístup ke koncovému bodu a vytvářet aplikace, které podporují scénáře Microsoftu 365, které pokrývají produktivitu, spolupráci, vzdělávání, lidi a inteligenci na pracovišti a mnoho dalšího. Microsoft Graph obsahuje také výkonnou sadu služeb, které spravují identitu uživatele a zařízení.

Můžete si například přečíst vlastnosti přihlášeného uživatele tak, že se dostanete ke koncovému https://graph.microsoft.com/v1.0/me bodu.