Autoryzowanie dostępu do interfejsów API za pomocą biblioteki uwierzytelniania firmy Microsoft

Ukończone

Teraz możesz zalogować użytkowników firmy do aplikacji internetowej. Następnie chcesz wyświetlić informacje, takie jak jego stanowisko, służbowy adres e-mail itd. z profilu pracownika na stronie. Okaże się, że interfejs API programu Microsoft Graph zapewnia dostęp do danych powiązanych z użytkownikiem.

W tej lekcji dowiesz się, jak biblioteka MSAL może ułatwić uzyskanie autoryzowanego dostępu do usługi firmy Microsoft, takich jak interfejs API programu Microsoft Graph.

Uprawnienia i zakresy interfejsu API

Usługi sieci Web zabezpieczone przez identyfikator Entra firmy Microsoft definiują zestaw uprawnień, które zapewniają dostęp do funkcji interfejsu API i danych udostępnianych przez usługę. Aplikacja może zażądać tych uprawnień od użytkowników i administratorów, którzy muszą zatwierdzić żądanie, zanim aplikacja będzie mogła uzyskać dostęp do danych lub działać w imieniu użytkownika. Na przykład program Microsoft Graph ma zdefiniowane uprawnienia do wykonywania następujących zadań, między innymi:

  • Odczytywanie kalendarza użytkownika
  • Zapisywanie w kalendarzu użytkownika
  • Wysyłanie wiadomości e-mail jako użytkownik

Użytkownicy i administratorzy mogą kontrolować i wiedzieć, do jakich danych może uzyskiwać dostęp aplikacja. Aby aplikacja mogła uzyskać dostęp do interfejsu API zabezpieczonego przez firmę Microsoft, należy podać uprawnienia aplikacji do wykonywania akcji.

Identyfikator Entra firmy Microsoft obsługuje dwa typy uprawnień: uprawnienia delegowane i uprawnienia aplikacji.

  • Uprawnienia delegowane są używane przez aplikacje, w których jest zalogowany użytkownik. W przypadku tych aplikacji użytkownik lub administrator wyraża zgodę na uprawnienia żądane przez aplikację. Aplikacja jest delegowana do działania jako zalogowany użytkownik, gdy wykonuje wywołania docelowego interfejsu API. Niektóre uprawnienia z wysokimi uprawnieniami wymagają zgody administratora.

  • Uprawnienia aplikacji są używane przez aplikacje uruchamiane bez zalogowanego użytkownika, na przykład aplikacje uruchamiane jako usługi w tle lub demony. Tylko administrator może wyrazić zgodę na uprawnienia aplikacji.

Te uprawnienia interfejsu API można przypisać do rejestracji aplikacji w witrynie Azure Portal.

Zakresy

Identyfikator Entra firmy Microsoft implementuje protokół autoryzacji OAuth 2.0, za pomocą którego aplikacja może uzyskiwać dostęp do zasobów hostowanych w Internecie w imieniu użytkownika.

W usłudze OAuth 2.0 te typy zestawów uprawnień są nazywane zakresami. Podczas wysyłania żądania autoryzacji do identyfikatora Entra firmy Microsoft aplikacja żąda wymaganych uprawnień, określając uprawnienie w parametrze zapytania żądania scope . Na przykład wartość https://graph.microsoft.com/Calendars.Read zakresu służy do żądania uprawnień do odczytywania kalendarzy użytkownika w programie Microsoft Graph.

Uzyskiwanie tokenów dostępu za pomocą biblioteki MSAL

Tokeny dostępu umożliwiają aplikacjom klienckim bezpieczne wywoływanie internetowych interfejsów API chronionych przez identyfikator Firmy Microsoft Entra. Istnieje kilka sposobów uzyskiwania tokenu dostępu przy użyciu biblioteki Microsoft Authentication Library (MSAL). Ogólnie rzecz biorąc, metoda używana do uzyskiwania tokenu zależy od tego, czy aplikacja jest publiczną aplikacją kliencką, np. aplikacją klasyczną, aplikacją mobilną, czy poufnymi aplikacjami klienckimi, takimi jak aplikacja internetowa, internetowy interfejs API lub aplikacja demona.

Kilka metod pozyskiwania tokenu biblioteki MSAL wymaga scopes parametru, który jest listą ciągów, które deklarują żądane uprawnienia i żądane zasoby.

Biblioteka MSAL buforuje token po jego uzyskaniu. W przypadku aplikacji internetowych korzystających z przepływu kodu autoryzacji OpenID Connect zalecany wzorzec w kontrolerach to:

  • Najpierw spróbuj uzyskać token dyskretnie z pamięci podręcznej przed podjęciem próby uzyskania tokenu w inny sposób. Poniższy kod jest fragmentem implementacji acquireTokenSilently metody w AuthHelper klasie.

    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();
    
  • Jeśli w pamięci podręcznej nie ma tokenu, a żądanie tokenu dyskretnego nie może uzyskać tokenu, możesz uzyskać token przy użyciu przepływu kodu autoryzacji:

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

Biblioteka MSAL może również odświeżyć token, gdy zbliża się do wygaśnięcia (ponieważ pamięć podręczna tokenu zawiera również token odświeżania).

Wyniki uwierzytelniania

Gdy klient żąda tokenu dostępu, identyfikator Entra firmy Microsoft zwraca również wynik uwierzytelniania zawierający metadane dotyczące tokenu dostępu. Te dane umożliwiają aplikacji inteligentne buforowanie tokenów dostępu bez konieczności analizowania samego tokenu dostępu. Funkcja AuthenticationResult MSAL zwraca dane:

  • Token dostępu dla internetowego interfejsu API.
  • Token identyfikatora użytkownika (JWT).
  • Wygaśnięcie tokenu, które informuje o dacie/godzinie wygaśnięcia tokenu.
  • Identyfikator dzierżawy zawiera dzierżawę, w której został znaleziony użytkownik.
  • Zakresy, dla których wystawiono token.
  • Unikatowy identyfikator użytkownika.

Wprowadzenie do programu Microsoft Graph

Interfejs API programu Microsoft Graph oferuje pojedynczy punkt końcowy, https://graph.microsoft.com, aby zapewnić dostęp do bogatych, skoncentrowanych na ludziach danych i szczegółowych informacji w chmurze firmy Microsoft. Możesz użyć interfejsów API REST lub zestawów SDK, aby uzyskać dostęp do punktu końcowego i tworzyć aplikacje, które obsługują scenariusze platformy Microsoft 365, obejmujące produktywność, współpracę, edukację, osoby i inteligencję w miejscu pracy oraz wiele innych. Program Microsoft Graph zawiera również zaawansowany zestaw usług, które zarządzają tożsamościami użytkowników i urządzeń.

Na przykład możesz odczytać właściwości zalogowanego użytkownika, korzystając z punktu końcowego https://graph.microsoft.com/v1.0/me .