Interpretieren einer Microsoft Graph-Anforderung

Abgeschlossen

In dieser exemplarischen Vorgehensweise wird erläutert, wie eine Java Webanwendung das Profil des angemeldeten Benutzers aus Microsoft Graph lesen kann. Die Anforderung, Java Fragment und antwort unten sind illustrative Beispiele mit Erklärungen, kein Labor oder eine Anforderung zum Senden einer echten API-Anforderung.

Das Referenzservletbeispiel verwendet delegierte User.Read. Die aad.scopes-Konfigurationseigenschaft stellt Config.SCOPES diesen Wert zur Verfügung, den der Authentifizierungscode bei der Anmeldung anfordert.

Die API-Berechtigungsliste der App-Registrierung beschreibt konfigurierte Berechtigungen. Der folgende Screenshot ist ein Beispiel für diese Ansicht, keine Anweisung zum Ändern einer Registrierung.

Screenshot der Seite

Drei Fakten erläutern den Autorisierungskontext:

  • Der Code fordert delegierte User.Read für Microsoft Graph an.
  • Die Zustimmung kann vom Benutzer oder einem autorisierten Administrator stammen, je nach Mandantenrichtlinie und vorhandenen Zuschüssen.
  • Das Hinzufügen einer Berechtigung zur Registrierung bewirkt weder eine Einwilligung noch ändert es die vom Code angeforderten Berechtigungsbereiche.

Im Beispiel wird diese Berechtigung während der Anmeldung angefordert, sodass keine separate Annahme besteht, dass jede Graph-Anforderung eine Zustimmungsaufforderung anzeigt.

Lesen der HTTP-Anforderung

Das folgende HTTP-Beispiel zeigt die wesentlichen Teile einer Profilanforderung. <graph-access-token> ist ein erklärender Platzhalter, kein Token zum Abrufen oder Einfügen in ein Tool.

GET /v1.0/me HTTP/1.1
Host: graph.microsoft.com
Authorization: Bearer <graph-access-token>

Die Anforderung verwendet HTTPS, um zu erreichen https://graph.microsoft.com/v1.0/me. /me identifiziert den angemeldeten Benutzer in einem delegierten Kontext. Der Header trägt ein Zugriffstoken, das für Microsoft Graph vorgesehen ist. Er Authorization trägt nicht das ID-Token der Anwendung, einen Autorisierungscode oder einen geheimen Clientschlüssel.

User.Read ist ausreichend, um den veranschaulichten Vorgang zum Lesen des Profils des angemeldeten Benutzers zu verwenden. Er autorisiert keinen willkürlichen Zugriff auf die Informationen anderer Benutzer. Die Referenz zum Abrufen einer Benutzer-API beschreibt den Endpunkt und die Berechtigungen.

Lesen Sie die entsprechende Java-SDK-Dokumentation

Das historische Beispiel CallGraphServlet behandelt seine eigene /call_graph Route und verwendet das Microsoft Graph SDK, um die API-Anforderung zu stellen. Das folgende Fragment veranschaulicht, dass der Aufruf nach dem Tokenerwerb erfolgreich war.

User user = GraphHelper.getGraphClient(contextAdapter).me().buildRequest().get();

GraphHelper ist ein vom Beispiel definierter Hilfsprogramm, nicht eine integrierte MSAL4J-API. Es wird ein GraphServiceClient erstellt, dessen Authentifizierungsanbieter das Graph-Zugriffstoken des angemeldeten Benutzers aus dem authentifizierten Kontext des Beispiels bereitstellt. contextAdapter verknüpft die aktuelle Anfrage mit diesem Applikationskontext.

In dieser SDK-Version me() wählt den Endpunkt des angemeldeten Benutzers aus, buildRequest() erstellt die Anforderung und get() sendet sie und deserialisiert die Antwort in ein Microsoft Graph-ModellUser. Das Fragment lässt das umgebende Servlet, Importe, Sitzungsbehandlung und Fehlerverarbeitung aus; es ist keine vollständige Anwendung.

Note

Dieses Fragment spiegelt die Microsoft Graph SDK für Java-5.5.0-Syntax des historischen Beispiels wider. Das v6 SDK ändert das Anforderungsmuster, die Clientkonstruktion, die Authentifizierungsintegration und den Modellzugriff. Im Microsoft Graph Java SDK v6-Upgradehandbuch werden diese Unterschiede erläutert. Ein v6-only-Anforderungsausdruck ist nicht mit dem v5-Abhängigkeits- und Hilfscode des Beispiels kompatibel.

Interpretieren Sie eine beispielhafte Antwort

Eine verkürzte Beispielantwort könnte die folgenden Profilfelder enthalten. Die Werte sind fiktiv und keine Ausgabe, die der Lernende nachbilden muss.

{
  "displayName": "Avery Rivera",
  "jobTitle": "Service specialist",
  "mail": "avery@example.com"
}

Die Anwendung kann diese Felder verwenden, um Profilinformationen darzustellen. Tatsächliche Werte hängen vom Verzeichnisprofil des Benutzers ab, und Felder können nicht vorhanden oder null sein. Ein Profilfeld ist kein Nachweis der Beschäftigung oder ein Ersatz für die Autorisierungsrichtlinie der Anwendung.

Die allgemeine Aufteilung der Zuständigkeiten ist wichtig: Microsoft Entra ID stellt ein Token unter den anwendbaren Berechtigungs- und Zustimmungsregeln aus, MSAL4J erwirbt dieses Token, und das Graph SDK oder ein HTTP-Client verwendet es, um Daten anzufordern. Das Erstellen eines Graph-Clients gewährt keinen Zugriff.