Przykład interfejsu API chronionego przez platformę wyrażania zgody tożsamości firmy Microsoft

Ten artykuł może pomóc, jako deweloper, zaprojektować strategię uprawnień aplikacji w celu zapewnienia najniższych uprawnień. Przed kontynuowaniem zapoznaj się z artykułem dotyczącym ochrony interfejsu API, aby poznać najlepsze rozwiązania dotyczące rejestracji, definiowania uprawnień i zgody oraz wymuszania dostępu.

Przyjrzyjmy się, w jaki sposób interfejs API chroniony przez Platforma tożsamości Microsoft korzysta z platformy wyrażania zgody na tożsamość firmy Microsoft. Jako przykład użyjemy interfejsu API programu Microsoft Graph, ponieważ jest to najbardziej rozbudowane wykorzystanie platformy Platforma tożsamości Microsoft wyrażania zgody.

Konwencja nazewnictwa nazw uprawnień

Zespół programu Microsoft Graph utworzył konwencję nazewnictwa nazw uprawnień, aby ułatwić łączenie uprawnień z dostępem do zasobów, który jest włączony. Nazwy uprawnień programu Microsoft Graph są zgodne z prostym wzorcem resource.operation.constraint . Dwie podstawowe operacje to Read i ReadWrite (w tym aktualizacja i usuwanie).

Element ograniczenia ma wpływ na stopień dostępu, jaki aplikacja ma w katalogu. Program Microsoft Graph obsługuje następujące ograniczenia:

  • Wszystkie przyznaje aplikacji uprawnienia do wykonywania operacji na wszystkich zasobach określonego typu w katalogu.
  • Udostępnione przyznaje aplikacji uprawnienia do wykonywania operacji na zasobach, które inni użytkownicy udostępnili zalogowanym użytkownikowi.
  • Aplikacja AppFolder udziela aplikacji uprawnień do odczytywania i zapisywania plików w dedykowanym folderze w usłudze OneDrive. To ograniczenie jest widoczne tylko w obiekcie uprawnień Pliki i jest prawidłowe tylko dla kont Microsoft.
  • Jeśli określisz ustawienie Nie ma ograniczenia, aplikacja może wykonywać tylko operacje na zasobach, których właścicielem jest zalogowany użytkownik.

Dostęp i operacje względem określonych zasobów

Przyjrzyjmy się niektórym uprawnieniam lub zakresom obiektu użytkownika w programie Microsoft Graph, aby zobaczyć, jak projektanci interfejsu API firmy Microsoft włączyli określony dostęp i operacje względem określonych zasobów:

Uprawnienie Ciąg wyświetlania opis
User.Read Logowanie i odczytywanie profilu użytkownika Umożliwia użytkownikom logowanie się do aplikacji i umożliwia aplikacji odczytywanie profilu zalogowanych użytkowników. Umożliwia również aplikacji odczytywanie podstawowych informacji firmowych zalogowanych użytkowników.
User.ReadWrite Dostęp do odczytu i zapisu w profilu użytkownika Umożliwia aplikacji odczytywanie pełnego profilu zalogowanych użytkowników. Umożliwia również aplikacji aktualizowanie informacji o profilu zalogowanych użytkowników w ich imieniu.

User.Read i User.ReadWrite istnieje (w przeciwieństwie do jednego uprawnienia, takiego jak User.Access to nie istnieje), aby aplikacje mogły postępować zgodnie z zasadą zerowego zaufania najniższych uprawnień. Jeśli deweloper nie ma wymagania i kodu w celu zaktualizowania profilu użytkownika, aplikacja nie będzie prosić o User.ReadWrite. W związku z tym osoba atakująca nie może naruszyć bezpieczeństwa aplikacji i użyć jej do zmiany danych.

Zwróć uwagę, że User.Read nie tylko daje aplikacji dostęp do obiektu użytkownika. Każde uprawnienie reprezentuje określony zakres operacji. Ważne jest, aby deweloperzy i administratorzy zapoznali się z opisem uprawnień, aby dokładnie sprawdzić, jakie uprawnienia są włączone. User.Read, oprócz włączenia odczytywania pełnego profilu bieżącego użytkownika, umożliwia aplikacji wyświetlanie podstawowych informacji z obiektu Organizacje w programie Microsoft Graph.

Przyjrzyjmy się innemu uprawnieniem:

Uprawnienie Ciąg wyświetlania opis
User.ReadBasic.All Odczytywanie podstawowych profilów wszystkich użytkowników Umożliwia aplikacji odczytywanie podstawowego zestawu właściwości profilu innych użytkowników w organizacji w imieniu zalogowanego użytkownika. Zawiera nazwę wyświetlaną, imię i nazwisko, adres e-mail, otwarte rozszerzenia i zdjęcie. Umożliwia aplikacji odczytywanie pełnego profilu zalogowanego użytkownika.

Zakres operacji rozpoczynający User.ReadBasic.All się od wszystkiego, co User.Read robi. Ponadto można uzyskać dostęp do nazwy wyświetlanej, imienia i nazwiska, adresu e-mail, zdjęcia i otwartych rozszerzeń dla innych użytkowników organizacji. Określony zakres operacji umożliwia aplikacjom posiadanie ładnego interfejsu użytkownika selektora osób i jest przykładem projektantów interfejsu API przy użyciu uprawnień do włączenia określonego zakresu operacji.

Przyjrzyjmy się jeszcze kilku uprawnieniam do obiektu użytkownika programu Microsoft Graph:

Uprawnienie Ciąg wyświetlania opis
User.Read.All Odczytywanie pełnych profilów wszystkich użytkowników Umożliwia aplikacji odczytywanie pełnego zestawu właściwości profilu, raportów i menedżerów innych użytkowników w organizacji w imieniu zalogowanego użytkownika.
User.ReadWrite.All Odczytywanie i zapisywanie pełnych profilów wszystkich użytkowników Umożliwia aplikacji odczytywanie i zapisywanie pełnego zestawu właściwości profilu, raportów i menedżerów innych użytkowników w organizacji w imieniu zalogowanego użytkownika. Umożliwia również aplikacji tworzenie i usuwanie użytkowników oraz resetowanie haseł użytkowników w imieniu zalogowanego użytkownika.

Podobnie jak w przypadku User.Read i User.ReadWriteUser.Read.All , i User.ReadWrite.All są odrębnymi uprawnieniami, które umożliwiają aplikacji przestrzeganie zasady zerowego zaufania z najmniejszymi uprawnieniami.

User.Read.All jest interesujące, ponieważ każdy użytkownik w organizacji ma tę możliwość (na przykład otwórz program Outlook, przejdź w górę i w dół łańcucha raportów). Jako osoba indywidualna możesz zobaczyć pełny profil użytkownika każdego innego użytkownika w organizacji. Jednak projektanci interfejsu API programu Microsoft Graph zdecydowali, że tylko administratorzy powinni zezwolić aplikacji na wykonanie tej samej operacji, ponieważ User.Read.All obejmuje hierarchię organizacyjną dzierżawy. Jeśli zły aktor uzyskuje dostęp do tych informacji, może zainstalować docelowy atak wyłudzania informacji, w którym wiadomość e-mail wyłudzająca informacje pochodzi od menedżera osoby lub menedżera.

User.ReadWrite.All to zaawansowany zakres operacji. Aplikacja, któremu udzielono tego uprawnienia, może aktualizować, a nawet usuwać każdego użytkownika w dzierżawie. Jako delegowane uprawnienie, gdy użytkownik znajduje się przed aplikacją, aplikacja może wykonywać tylko to, co może zrobić bieżący użytkownik. Użytkownicy regularni nie mogą aktualizować ani usuwać innych użytkowników niezależnie od uprawnień aplikacji. Jednak gdy administrator dzierżawy korzysta z aplikacji, może wykonywać te operacje. Podejmując decyzję o przyznaniu lub odmowie udzielenia tego uprawnienia, należy ocenić aplikację przy użyciu użytkownika administratora dzierżawy.

Biorąc pod uwagę możliwości i User.ReadWrite.All, projektanci interfejsu User.Read.All API programu Microsoft Graph wyznaczyli te uprawnienia jako wymagające zgody administratora. Dodajmy Administracja? Kolumna do naszej tabeli uprawnień, aby wskazać, kiedy uprawnienie wymaga zgody administratora:

Uprawnienie Ciąg wyświetlania opis Administracja?
User.Read Logowanie i odczytywanie profilu użytkownika Umożliwia użytkownikom logowanie się do aplikacji i umożliwia aplikacji odczytywanie profilu zalogowanych użytkowników. Umożliwia również aplikacji odczytywanie podstawowych informacji firmowych zalogowanych użytkowników. Nie
User.ReadWrite Dostęp do odczytu i zapisu w profilu użytkownika Umożliwia aplikacji odczytywanie pełnego profilu zalogowanych użytkowników. Umożliwia również aplikacji aktualizowanie informacji o profilu zalogowanych użytkowników w ich imieniu. Nie
User.ReadBasic.All Odczytywanie podstawowych profilów wszystkich użytkowników Umożliwia aplikacji odczytywanie podstawowego zestawu właściwości profilu innych użytkowników w organizacji w imieniu zalogowanego użytkownika. Zawiera nazwę wyświetlaną, imię i nazwisko, adres e-mail, otwarte rozszerzenia i zdjęcie. Umożliwia aplikacji odczytywanie pełnego profilu zalogowanego użytkownika. Nie
User.Read.All Odczytywanie pełnych profilów wszystkich użytkowników Umożliwia aplikacji odczytywanie pełnego zestawu właściwości profilu, raportów i menedżerów innych użytkowników w organizacji w imieniu zalogowanego użytkownika. Tak
User.ReadWrite.All Odczytywanie i zapisywanie pełnych profilów wszystkich użytkowników Umożliwia aplikacji odczytywanie i zapisywanie pełnego zestawu właściwości profilu, raportów i menedżerów innych użytkowników w organizacji w imieniu zalogowanego użytkownika. Umożliwia również aplikacji tworzenie i usuwanie użytkowników oraz resetowanie haseł użytkowników w imieniu zalogowanego użytkownika. Tak

Jak pokazano w artykule Żądanie uprawnień, które wymagają zgody administracyjnej, administratorzy dzierżawy mogą unieważnić wymagania i wyznaczyć dowolne lub wszystkie uprawnienia aplikacji w dzierżawie jako wymagające zgody administratora. Warto zaprojektować aplikację, aby bezpiecznie obsłużyć, gdy nie otrzymasz tokenu od żądania. Brak zgody jest jednym z wielu powodów, dla których aplikacja może nie otrzymać tokenu.

Następne kroki