Autorisieren des Zugriffs auf APIs mit der Microsoft-Authentifizierungsbibliothek

Abgeschlossen

Sie können die Benutzer Ihres Unternehmens nun bei der Webanwendung anmelden. Als Nächstes müssen Sie Informationen aus dem Mitarbeiterprofil auf der Seite anzeigen, wie die Berufsbezeichnung, die geschäftliche E-Mail-Adresse usw. Hierzu stellt die Microsoft Graph-API Ihnen Zugriff auf benutzerbezogene Daten bereit.

In dieser Lektion erfahren Sie, wie MSAL Ihnen helfen kann, autorisierten Zugriff auf Microsoft-Dienste wie die Microsoft Graph-API zu erhalten.

API-Berechtigungen und -Bereiche

Von Microsoft Entra ID geschützte Webdienste definieren eine Gruppe von Berechtigungen, die Zugriff auf die API-Funktionalität und Daten bieten, die dieser Dienst verfügbar macht. Eine Anwendung kann diese Berechtigungen von Benutzern und Administratoren anfordern. Diese müssen die Anforderung dann genehmigen, bevor die Anwendung auf Daten zugreifen oder im Namen eines Benutzers agieren kann. Beispielsweise verfügt Microsoft Graph über definierte Berechtigungen, um unter anderem folgende Aufgaben auszuführen:

  • Lesen des Kalenders eines Benutzers
  • Schreiben in den Kalender eines Benutzers
  • Senden von E-Mails als Benutzer

Benutzer und Administratoren können Kontrolle ausüben und wissen, auf welche Daten die Anwendung zugreifen kann. Bevor Ihre Anwendung auf eine von Microsoft geschützte API zugreifen kann, müssen Sie die Anwendungsberechtigungen zum Durchführen der Aktionen erteilen.

Microsoft Entra ID unterstützt zwei Arten von Berechtigungen: delegierte Berechtigungen und Anwendungsberechtigungen.

  • Delegierte Berechtigungen werden von Apps verwendet, bei denen ein angemeldeter Benutzer vorhanden ist. Bei diesen Apps willigt entweder der Benutzer oder ein Administrator in die von der App angeforderten Berechtigungen ein. An die App wird die Berechtigung delegiert, bei an die API gerichteten Aufrufen als angemeldeter Benutzer zu fungieren. Für bestimmte erhöhte Berechtigungen ist eine Administratoreinwilligung erforderlich.

  • Anwendungsberechtigungen werden von Apps verwendet, die ohne vorhandenen angemeldeten Benutzer ausgeführt werden. Dies können beispielsweise Apps sein, die als Hintergrunddienste oder Daemons ausgeführt werden. Anwendungsberechtigungen erfordern die Einwilligung eines Administrators.

Sie können diese API-Berechtigungen über das Azure-Portal Ihrer App-Registrierung zuweisen.

Bereiche

Microsoft Entra ID implementiert das OAuth 2.0-Autorisierungsprotokoll, über das eine Anwendung im Namen eines Benutzers auf im Web gehostete Ressourcen zugreifen kann.

In OAuth 2.0 werden diese Arten von Berechtigungssätzen Bereiche genannt. Wenn eine Anwendung eine Autorisierungsanforderung an Microsoft Entra ID stellt, fordert sie die benötigten Berechtigungen an, indem die jeweilige Berechtigung im Abfrageparameter scope der Anforderung angegeben wird. Beispielsweise wird der Bereichswert https://graph.microsoft.com/Calendars.Read verwendet, um die Berechtigung zum Lesen der Benutzerkalender in Microsoft Graph anzufordern.

Abrufen von Zugriffstoken mit MSAL

Mithilfe von Zugriffstoken können Clientanwendungen auf sichere Weise Web-APIs aufrufen, die von Microsoft Entra ID geschützt werden. Es gibt verschiedene Möglichkeiten zum Abrufen eines Zugriffstokens mithilfe der Microsoft-Authentifizierungsbibliothek (Microsoft Authentication Library, MSAL). Die Methode zum Anfordern eines Tokens ist davon abhängig, ob es sich bei der Anwendung um eine öffentliche Clientanwendung (Desktopanwendung oder mobile App) oder um eine vertrauliche Clientanwendung (Web-App, Web-API oder Daemonanwendung) handelt.

Einige Tokenabrufmethoden von MSAL erfordern einen scopes-Parameter. Dabei handelt es sich um eine Liste von Zeichenfolgen, die die gewünschten Berechtigungen und angeforderten Ressourcen deklarieren.

Nachdem ein Token abgerufen wurde, wird es von MSAL zwischengespeichert. Für Webanwendungen, die den Autorisierungscodeflow „OpenID Connect“ verwenden, wird das folgende Muster in Controllern empfohlen:

  • Versuchen Sie zunächst, ein Token ohne Eingabeaufforderung aus dem Cache abzurufen, bevor Sie auf andere Weise ein Token abrufen. Der folgende Code ist ein Auszug aus der Implementierung der acquireTokenSilently -Methode in der AuthHelper -Klasse.

    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();
    
  • Wenn der Cache kein Token enthält und die Tokenanforderung ohne Eingabeaufforderung kein Token abrufen kann, können Sie das Token mithilfe des Autorisierungscodeflows abrufen:

    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 kann ein Token auch aktualisieren, wenn es bald abläuft (da der Tokencache auch ein Aktualisierungstoken enthält).

Authentifizierungsergebnisse

Wenn Ihr Client ein Zugriffstoken anfordert, gibt Microsoft Entra ID auch ein Authentifizierungsergebnis zurück, das Metadaten zum Zugriffstoken enthält. Die Daten ermöglichen Ihrer App das intelligente Zwischenspeichern von Zugriffstoken, ohne dass dabei das Zugriffstoken selbst analysiert werden muss. Die MSAL AuthenticationResult gibt Folgendes zurück:

  • Das Zugriffstoken für die Web-API.
  • Das ID-Token für den Benutzer (ein JWT).
  • Das Ablaufdatum des Tokens, das das Datum/die Uhrzeit für den Ablauf des Tokens enthält.
  • Die Mandanten-ID enthält den Mandanten, in dem der Benutzer gefunden wurde.
  • Die Geltungsbereiche, für die das Token ausgegeben wurde
  • Die eindeutige ID für den Benutzer

Einführung in Microsoft Graph

Die Microsoft Graph-API bietet einen einzelnen Endpunkt (https://graph.microsoft.com), um Zugriff auf umfassende, personenorientierte Daten und Erkenntnisse in der Microsoft-Cloud bereitzustellen. Sie können REST-APIs oder SDKs verwenden, um auf den Endpunkt zuzugreifen und Apps zu erstellen, die Microsoft 365-Szenarios unterstützen und Produktivität, Zusammenarbeit, Bildung, Menschen, intelligente Arbeitsplätze und vieles mehr fördern. Darüber hinaus umfasst Microsoft Graph leistungsstarke Dienste, die Benutzer- und Geräteidentität verwalten.

Beispielsweise können Sie die Eigenschaften eines angemeldeten Benutzers lesen, indem Sie auf den https://graph.microsoft.com/v1.0/me-Endpunkt zugreifen.