Beispiel für eine API, die vom Zustimmungsframework für Microsoft Identity geschützt ist

Dieser Artikel kann Ihnen als Entwickler dabei helfen, Ihre App-Berechtigungsstrategie so zu entwerfen, dass sie die geringsten Berechtigungen bereitstellt. Bevor Sie fortfahren, lesen Sie den Artikel API-Schutz, um bewährte Methoden für die Registrierung zu erlernen, Berechtigungen und Zustimmung zu definieren und den Zugriff zu erzwingen.

Sehen wir uns an, wie eine API, die durch die Microsoft Identity Platform geschützt ist, das Zustimmungsframework für Microsoft Identity verwendet. Wir verwenden die Microsoft Graph-API als Beispiel, da sie das Zustimmungsframework für Microsoft Identity Platform am umfassendsten nutzt.

Benennungskonvention für Berechtigungsnamen

Das Microsoft Graph-Team hat eine Benennungskonvention für Berechtigungsnamen erstellt, um die Verbindung der Berechtigung mit dem Ressourcenzugriff zu erleichtern, den die Berechtigung ermöglicht. Microsoft Graph-Berechtigungsnamen entsprechen einem einfachen resource.operation.constraint-Muster. Die beiden primären Vorgänge sind Read und ReadWrite (einschließlich Aktualisieren und Löschen).

Das Einschränkungselement wirkt sich auf den Zugriffsgrad aus, den Ihre App im Verzeichnis hat. Microsoft Graph unterstützt diese Einschränkungen:

  • All erteilt der App die Berechtigung, die Vorgänge für alle Ressourcen des angegebenen Typs in einem Verzeichnis auszuführen.
  • Shared erteilt Ihrer App die Berechtigung zum Ausführen der Vorgänge für Ressourcen, die andere Benutzer für den angemeldeten Benutzer freigegeben haben.
  • AppFolder gewährt Ihrer App die Berechtigung zum Lesen und Schreiben von Dateien in einem dedizierten Ordner in OneDrive. Diese Einschränkung wird nur für das Datei-Berechtigungsobjekt verfügbar gemacht und gilt nur für Microsoft-Konten.
  • Wenn Sie keine Einschränkung angeben, kann Ihre App nur die Vorgänge für die Ressourcen ausführen, die der angemeldete Benutzer besitzt.

Zugriff und Vorgänge für bestimmte Ressourcen

Sehen wir uns einige Berechtigungen oder Bereiche für das Benutzerobjekt in Microsoft Graph an, um zu sehen, wie die Microsoft API-Designer spezifischen Zugriff und Vorgänge für bestimmte Ressourcen aktiviert haben:

Berechtigung Anzeigezeichenfolge Beschreibung
User.Read Melden Sie sich an und lesen Sie das Benutzerprofil Ermöglicht Benutzern die Anmeldung bei der App. Die App kann das Profil der angemeldeten Benutzer lesen. Außerdem kann die App grundlegende Unternehmensinformationen von angemeldeten Benutzern lesen.
User.ReadWrite Lese- und Schreibzugriff auf das Benutzerprofil Ermöglicht es der App, das vollständige Profil des angemeldeten Benutzers zu lesen. Außerdem kann die App die Profilinformationen des angemeldeten Benutzers in seinem Namen aktualisieren.

User.Read und User.ReadWrite vorhanden (im Gegensatz zu einer einzigen Berechtigung wie User.Access, die nicht vorhanden ist), damit Anwendungen dem Zero Trust-Prinzip der geringsten Berechtigung folgen können. Wenn der Entwickler nicht über eine Anforderung und keinen Code zum Aktualisieren des Benutzerprofils verfügt, fragt die App nicht nach User.ReadWrite. Daher kann ein Angreifer die Anwendung nicht kompromittieren und zum Ändern von Daten verwenden.

Beachten Sie, dass User.Read der Anwendung nicht nur Zugriff auf das Benutzerobjekt gibt. Jede Berechtigung stellt einen bestimmten Vorgangsbereich dar. Es ist wichtig, dass Entwickler und Administratoren die Berechtigungsbeschreibung lesen, um genau zu sehen, was eine bestimmte Berechtigung ermöglicht. User.Readermöglicht der Anwendung zusätzlich zum Lesen des vollständigen Profils des aktuellen Benutzers die grundlegenden Informationen aus dem Organisationsobjekt in Microsoft Graph.

Schauen wir uns eine weitere Berechtigung an:

Berechtigung Anzeigezeichenfolge Beschreibung
User.ReadBasic.All Grundlegende Profile aller Benutzer lesen Ermöglicht der App, einen einfachen Satz von Profileigenschaften anderer Benutzer in Ihrer Organisation im Namen des angemeldeten Benutzers zu lesen. Umfasst Anzeigename, Vor- und Nachname, E-Mail-Adresse, offene Erweiterungen und Foto. Ermöglicht es der App, das vollständige Profil des angemeldeten Benutzers zu lesen.

Der Vorgangsbereich, User.ReadBasic.All der mit allem beginnt, was User.Read tut. Darüber hinaus können Sie auf Anzeigename, Vor- und Nachname, E-Mail-Adresse, Foto und offene Erweiterungen für andere Organisationsbenutzer zugreifen. Der spezifische Bereich des Vorgangs ermöglicht Anwendungen die Verwendung einer ansprechenden Benutzerauswahl-UI und ist ein Beispiel für die API-Designer, die eine Berechtigung zum Aktivieren eines bestimmten Vorgangsbereichs verwenden.

Sehen wir uns ein paar weitere Berechtigungen für das Microsoft Graph-Benutzerobjekt an:

Berechtigung Anzeigezeichenfolge Beschreibung
User.Read.All Vollständige Profile aller Benutzer lesen Ermöglicht der App, den vollständigen Satz von Profileigenschaften, Berichten und Vorgesetzten anderer Benutzer in Ihrer Organisation im Namen des angemeldeten Benutzers zu lesen.
User.ReadWrite.All Vollständige Profile aller Benutzer lesen und schreiben Ermöglicht der App, den vollständigen Satz von Profileigenschaften, Berichten und Vorgesetzten anderer Benutzer in Ihrer Organisation im Namen des angemeldeten Benutzers zu lesen und zu schreiben. Ermöglicht der App außerdem, Benutzer zu erstellen und zu löschen und Benutzerpasswörter im Namen des angemeldeten Benutzers zurückzusetzen.

Wie bei User.Read und User.ReadWrite, sind User.Read.All und User.ReadWrite.All unterschiedliche Berechtigungen, die es einer Anwendung ermöglichen, dem Zero Trust-Prinzip der geringsten Berechtigung zu folgen.

User.Read.All ist interessant, da jeder Benutzer in der Organisation über diese Funktion verfügt (z. B. Outlook öffnen, eine Berichtskette nach oben und unten öffnen). Sie können als Einzelperson das vollständige Benutzerprofil jedes anderen Benutzers in Ihrer Organisation sehen. Die Microsoft Graph-API-Designer haben jedoch entschieden, dass nur Administratoren zulassen sollten, dass eine Anwendung denselben Vorgang ausführen kann, da User.Read.All die Organisationshierarchie des Mandanten enthält. Wenn ein Angreifer auf diese Informationen zugegriffen hat, könnte er einen gezielten Phishing-Angriff starten, bei dem die Phishing-E-Mail vom Vorgesetzten einer Person oder dem Vorgesetzten seines Vorgesetzten stammt.

User.ReadWrite.All ist ein leistungsstarker Betriebsbereich. Eine Anwendung, die diese Berechtigung erteilt hat, kann jeden Benutzer im Mandanten aktualisieren oder sogar löschen. Als delegierte Berechtigung kann die App, wenn sich ein Benutzer vor der App befindet, nur die Aktionen ausführen, die der aktuelle Benutzer ausführen kann. Normale Benutzer können andere Benutzer unabhängig von den Berechtigungen der App nicht aktualisieren oder löschen. Wenn jedoch ein Mandantenadministrator die App verwendet, können sie diese Vorgänge ausführen. Bei der Entscheidung, diese Berechtigung zu erteilen oder zu verweigern, sollten Sie Ihre App mit einem Mandantenadministratorbenutzer auswerten.

Angesichts der Leistungsfähigkeit von User.Read.All und User.ReadWrite.All haben die Microsoft Graph-API-Designer diese Berechtigungen mit Einwilligung des Administrators festgelegt. Lassen Sie uns eine Spalte Administrator? in unserem Berechtigungsverzeichnis einfügen, um anzugeben, wann die Berechtigung eine Administratoreinwilligung erfordert:

Berechtigung Anzeigezeichenfolge Beschreibung Admin?
User.Read Melden Sie sich an und lesen Sie das Benutzerprofil Ermöglicht Benutzern die Anmeldung bei der App. Die App kann das Profil der angemeldeten Benutzer lesen. Außerdem kann die App grundlegende Unternehmensinformationen von angemeldeten Benutzern lesen. Nein
User.ReadWrite Lese- und Schreibzugriff auf das Benutzerprofil Ermöglicht es der App, das vollständige Profil des angemeldeten Benutzers zu lesen. Außerdem kann die App die Profilinformationen des angemeldeten Benutzers in seinem Namen aktualisieren. Nein
User.ReadBasic.All Grundlegende Profile aller Benutzer lesen Ermöglicht der App, einen einfachen Satz von Profileigenschaften anderer Benutzer in Ihrer Organisation im Namen des angemeldeten Benutzers zu lesen. Umfasst Anzeigename, Vor- und Nachname, E-Mail-Adresse, offene Erweiterungen und Foto. Ermöglicht es der App, das vollständige Profil des angemeldeten Benutzers zu lesen. Nein
User.Read.All Vollständige Profile aller Benutzer lesen Ermöglicht der App, den vollständigen Satz von Profileigenschaften, Berichten und Vorgesetzten anderer Benutzer in Ihrer Organisation im Namen des angemeldeten Benutzers zu lesen. Ja
User.ReadWrite.All Vollständige Profile aller Benutzer lesen und schreiben Ermöglicht der App, den vollständigen Satz von Profileigenschaften, Berichten und Vorgesetzten anderer Benutzer in Ihrer Organisation im Namen des angemeldeten Benutzers zu lesen und zu schreiben. Ermöglicht der App außerdem, Benutzer zu erstellen und zu löschen und Benutzerpasswörter im Namen des angemeldeten Benutzers zurückzusetzen. Ja

Wie im Artikel Anforderung von Berechtigungen, die eine Administratoreinwilligung erfordern gezeigt, können Mandantenadministratoren Anforderungen überschreiben und alle Anwendungsberechtigungen in ihrem Mandanten mit erforderlicher Administratoreinwilligung definieren. Sie sind schlau genug, Ihre App so zu entwerfen, dass sie ordnungsgemäß verarbeitet wird, wenn Sie kein Token von Ihrer Anforderung erhalten. Fehlende Einwilligung ist einer von vielen Gründen, warum Ihre App möglicherweise kein Token empfängt.

Nächste Schritte