Auktorisera åtkomst till API:er med Microsoft Authentication Library

Slutförd

Nu kan du logga in företagets användare i webbappen. Sedan vill du visa information som deras befattning, e-post för arbete och så vidare från deras medarbetares profil på sidan. Du upptäcker att Microsoft Graph API ger åtkomst till användarrelaterade data.

I den här lektionen får du lära dig hur MSAL kan hjälpa dig att få auktoriserad åtkomst till Microsoft-tjänster till exempel Microsoft Graph API.

API-behörigheter och omfång

Webbtjänster som skyddas av Microsoft Entra-ID definierar en uppsättning behörigheter som ger åtkomst till de API-funktioner och data som tjänsten exponerar. Ett program kan begära dessa behörigheter från användare och administratörer, som måste godkänna begäran innan programmet kan komma åt data eller agera för en användares räkning. Microsoft Graph har till exempel definierat behörigheter för att utföra följande uppgifter, bland annat:

  • Läsa en användares kalender
  • Skriva till en användares kalender
  • Skicka e-post som användare

Användare och administratörer kan utöva kontroll och veta vilka data programmet kan komma åt. Innan ditt program kan komma åt ett API som skyddas av Microsoft måste du ange programbehörigheter för att utföra åtgärderna.

Microsoft Entra-ID stöder två typer av behörigheter: delegerade behörigheter och programbehörigheter.

  • Delegerade behörigheter används av appar som har en inloggad användare. För dessa appar godkänner antingen användaren eller en administratör de behörigheter som appen begär. Appen delegeras behörighet att fungera som den inloggade användaren när den gör anrop till mål-API:et. Vissa behörigheter med hög behörighet kräver administratörsmedgivande.

  • Programbehörigheter används av appar som körs utan en inloggad användare, till exempel appar som körs som bakgrundstjänster eller daemoner. Endast en administratör kan godkänna programbehörigheter.

Du kan tilldela dessa API-behörigheter till din appregistrering från Azure-portalen.

Omfattningar

Microsoft Entra ID implementerar OAuth 2.0-auktoriseringsprotokollet genom vilket ett program kan komma åt webbaserade resurser åt en användare.

I OAuth 2.0 kallas dessa typer av behörighetsuppsättningar för omfång. När du gör en auktoriseringsbegäran scope till Microsoft Entra-ID begär ett program de behörigheter som krävs genom att ange behörigheten i frågeparametern för begäran. Omfångsvärdet https://graph.microsoft.com/Calendars.Read används till exempel för att begära behörighet att läsa användarens kalendrar i Microsoft Graph.

Hämta åtkomsttoken med MSAL

Med åtkomsttoken kan klientprogram anropa webb-API:er som skyddas av Microsoft Entra-ID på ett säkert sätt. Det finns flera sätt att hämta en åtkomsttoken med hjälp av Microsoft Authentication Library (MSAL). I allmänhet beror den metod som används för att hämta en token på om programmet är ett offentligt klientprogram som skrivbord eller mobilapp, eller ett konfidentiellt klientprogram som webbapp, webb-API eller daemonprogram.

Flera av MSAL:s metoder för tokenförvärv kräver en scopes parameter, som är en lista med strängar som deklarerar önskade behörigheter och de resurser som begärs.

MSAL cachelagrar en token efter att den har hämtats. För webbprogram som använder OpenID-Anslut auktoriseringskodflöde är det rekommenderade mönstret i kontrollanterna att:

  • Försök först att hämta en token tyst från cachen innan du försöker hämta en token på annat sätt:

    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();
    
  • Om det inte finns någon token i cacheminnet och begäran om tyst token inte kan hämta en token kan du hämta token med hjälp av auktoriseringskodflödet:

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

MSAL kan också uppdatera en token när den närmar sig förfallodatum (eftersom tokencacheminnet också innehåller en uppdateringstoken).

Autentiseringsresultat

När klienten begär en åtkomsttoken returnerar Microsoft Entra-ID också ett autentiseringsresultat som innehåller metadata om åtkomsttoken. Med dessa data kan din app utföra intelligent cachelagring av åtkomsttoken utan att behöva parsa själva åtkomsttoken. MSAL-returnerar AuthenticationResult exponerar:

  • Åtkomsttoken för webb-API:et.
  • ID-token för användaren (en JWT).
  • Tokens förfallodatum, som anger datum/tid när token upphör att gälla.
  • Klientorganisations-ID:t innehåller klientorganisationen där användaren hittades.
  • De omfång som token utfärdades för.
  • Det unika ID:t för användaren.

Introduktion till Microsoft Graph

Microsoft Graph API erbjuder en enda slutpunkt, https://graph.microsoft.com, för att ge åtkomst till omfattande, personcentrerade data och insikter i Microsoft-molnet. Du kan använda REST-API:er eller SDK:er för att komma åt slutpunkten och skapa appar som stöder Microsoft 365-scenarier, som sträcker sig över produktivitet, samarbete, utbildning, personer och arbetsplatsinformation och mycket mer. Microsoft Graph innehåller också en kraftfull uppsättning tjänster som hanterar användar- och enhetsidentitet.

Du kan till exempel läsa egenskaperna för en inloggad användare genom att https://graph.microsoft.com/v1.0/me komma åt slutpunkten.