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, uprawnień i 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żywamy interfejsu API programu Microsoft Graph, ponieważ jest on najbardziej rozbudowanym zastosowaniem platformy wyrażania zgody Platforma tożsamości Microsoft.
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 udostępnionych przez innych użytkowników udostępnionych 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 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 rodziny, 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 rodziny, 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.ReadWrite
User.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.
Uprawnienia wymagające zgody administratora
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 rodziny, 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
- Wywołanie interfejsu API z innego interfejsu API pomaga zapewnić zero trust, gdy masz jeden interfejs API, który musi wywoływać inny interfejs API i bezpiecznie opracowywać aplikację podczas pracy w imieniu użytkownika.
- Uzyskiwanie autoryzacji dostępu do zasobów pomaga zrozumieć, jak najlepiej zapewnić zero trust podczas uzyskiwania uprawnień dostępu do zasobów dla aplikacji.
- Dostosowywanie tokenów opisuje informacje, które można otrzymywać w tokenach firmy Microsoft Entra. Wyjaśniono w nim, jak dostosować tokeny w celu zwiększenia elastyczności i kontroli przy jednoczesnym zwiększeniu poziomu zabezpieczeń zerowego zaufania aplikacji z najmniejszymi uprawnieniami.
- Konfigurowanie oświadczeń grup i ról aplikacji w tokenach pokazuje, jak skonfigurować aplikacje przy użyciu definicji ról aplikacji i przypisać grupy zabezpieczeń do ról aplikacji. Te metody pomagają zwiększyć elastyczność i kontrolę przy jednoczesnym zwiększeniu zabezpieczeń zerowego zaufania aplikacji z najmniejszymi uprawnieniami.
- Żądanie uprawnień wymagających zgody administracyjnej opisuje środowisko uprawnień i zgody, gdy uprawnienia aplikacji wymagają zgody administracyjnej.
- W tym przewodniku Szybki start: ochrona internetowego interfejsu API za pomocą Platforma tożsamości Microsoft pobierz i uruchom przykładowy kod, który pokazuje, jak chronić internetowy interfejs API ASP.NET.
- W tym samouczku — przekształcanie i ochrona interfejsu API w usłudze Azure API Management zawiera informacje na temat konfigurowania typowych zasad w celu ukrycia informacji o stosie technologii i oryginalnych adresów URL w treści odpowiedzi HTTP interfejsu API.
- Najlepsze rozwiązania dotyczące autoryzacji pomagają zaimplementować najlepsze modele autoryzacji, uprawnień i zgody dla aplikacji.