Udostępnij za pośrednictwem


Zabezpieczanie aplikacji Java Spring Boot przy użyciu grup i oświadczeń grup

W tym artykule przedstawiono aplikację internetową Java Spring Boot korzystającą z biblioteki klienta Microsoft Entra ID Spring Boot Starter dla języka Java na potrzeby uwierzytelniania, autoryzacji i pozyskiwania tokenów. Aplikacja używa protokołu OpenID Connect do logowania użytkowników i ogranicza dostęp do stron na podstawie członkostwa w grupie zabezpieczeń Microsoft Entra ID.

Na poniższym diagramie przedstawiono topologię aplikacji:

Diagram przedstawiający topologię aplikacji.

Aplikacja kliencka używa biblioteki klienta Microsoft Entra ID Spring Boot Starter dla języka Java do logowania użytkowników w dzierżawie microsoft Entra ID i uzyskiwania tokenu identyfikatora z identyfikatora Entra firmy Microsoft.

Token identyfikatora zawiera oświadczenie grup. Aplikacja ładuje oświadczenia do listy spring GrantedAuthorities dla zalogowanych użytkowników. Te wartości określają strony, do których użytkowników ma uprawnienia dostępu.

Aby zapoznać się z filmem wideo obejmującym ten scenariusz, zobacz Implementowanie autoryzacji w aplikacjach przy użyciu ról aplikacji, grup zabezpieczeń, zakresów i ról katalogu.

Wymagania wstępne

  • Zestaw JDK w wersji 15. Ten przykład został opracowany w systemie z językiem Java 15, ale może być zgodny z innymi wersjami.
  • Maven 3
  • Pakiet rozszerzenia Java dla programu Visual Studio Code jest zalecany do uruchamiania tego przykładu w programie Visual Studio Code.
  • Dzierżawa identyfikatora entra firmy Microsoft. Aby uzyskać więcej informacji, zobacz Szybki start: konfigurowanie dzierżawy.
  • Konto użytkownika w dzierżawie microsoft Entra ID. Ten przykład nie działa z osobistym kontem Microsoft. W związku z tym jeśli zalogowałeś się do witryny Azure Portal przy użyciu konta osobistego i nie masz konta użytkownika w katalogu, musisz go utworzyć teraz.
  • Dwie grupy zabezpieczeń o nazwie AdminGroup i UserGroupzawierające użytkownika lub użytkowników, które chcesz podpisać i przetestować ten przykład. Alternatywnie możesz dodać użytkownika do dwóch istniejących grup zabezpieczeń w dzierżawie. Jeśli zdecydujesz się używać istniejących grup, pamiętaj, aby zmodyfikować przykładową konfigurację tak, aby korzystała z nazwy i identyfikatora obiektu istniejących grup zabezpieczeń.
  • Visual Studio Code
  • Azure Tools for Visual Studio Code

Zalecenia

  • Znajomość platformy Spring Framework.
  • Pewna znajomość terminalu systemu Linux/OSX.
  • jwt.ms na potrzeby inspekcji tokenów.
  • Program Fiddler do monitorowania aktywności sieci i rozwiązywania problemów.
  • Postępuj zgodnie z blogiem Microsoft Entra ID, aby być na bieżąco z najnowszymi wydarzeniami.

Konfigurowanie przykładu

W poniższych sekcjach pokazano, jak skonfigurować przykładową aplikację.

Klonowanie lub pobieranie przykładowego repozytorium

Aby sklonować przykład, otwórz okno powłoki Bash i użyj następującego polecenia:

git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 4-spring-web-app/3-Authorization-II/groups

Alternatywnie przejdź do repozytorium ms-identity-msal-java-samples , a następnie pobierz go jako plik .zip i wyodrębnij go na dysk twardy.

Ważne

Aby uniknąć ograniczeń długości ścieżki pliku w systemie Windows, sklonuj lub wyodrębnij repozytorium do katalogu w pobliżu katalogu głównego dysku twardego.

Rejestrowanie przykładowej aplikacji w dzierżawie identyfikatora entra firmy Microsoft

W tym przykładzie istnieje jeden projekt. W poniższych sekcjach pokazano, jak zarejestrować aplikację przy użyciu witryny Azure Portal.

Wybierz dzierżawę microsoft Entra ID, w której chcesz utworzyć aplikacje

Aby wybrać dzierżawę, wykonaj następujące kroki:

  1. Zaloguj się w witrynie Azure Portal.

  2. Jeśli Twoje konto znajduje się w więcej niż jednej dzierżawie identyfikatora entra firmy Microsoft, wybierz swój profil w rogu witryny Azure Portal, a następnie wybierz pozycję Przełącz katalog , aby zmienić sesję na żądaną dzierżawę identyfikatora Entra firmy Microsoft.

Rejestrowanie aplikacji (java-spring-webapp-groups)

Aby zarejestrować aplikację, wykonaj następujące czynności:

  1. Przejdź do witryny Azure Portal i wybierz pozycję Microsoft Entra ID.

  2. Wybierz pozycję Rejestracje aplikacji w okienku nawigacji, a następnie wybierz pozycję Nowa rejestracja.

  3. Na wyświetlonej stronie Rejestrowanie aplikacji wprowadź następujące informacje o rejestracji aplikacji:

    • W sekcji Nazwa wprowadź zrozumiałą nazwę aplikacji do wyświetlania użytkownikom aplikacji — na przykład java-spring-webapp-groups.
    • W obszarze Obsługiwane typy kont wybierz pozycję Konta tylko w tym katalogu organizacyjnym.
    • W sekcji Identyfikator URI przekierowania (opcjonalnie) wybierz pozycję Sieć Web w polu kombi i wprowadź następujący identyfikator URI przekierowania: http://localhost:8080/login/oauth2/code/.
  4. Wybierz pozycję Zarejestruj, aby utworzyć aplikację.

  5. Na stronie rejestracji aplikacji znajdź i skopiuj wartość Identyfikator aplikacji (klienta), aby użyć jej później. Ta wartość jest używana w pliku konfiguracji aplikacji lub plikach.

  6. Na stronie rejestracji aplikacji wybierz pozycję Certyfikaty i wpisy tajne w okienku nawigacji, aby otworzyć stronę, na której można wygenerować wpisy tajne i przekazać certyfikaty.

  7. W sekcji Klucze tajne klienta wybierz pozycję Nowy klucz tajny klienta.

  8. Wpisz opis — na przykład wpis tajny aplikacji.

  9. Wybierz jeden z dostępnych czasów trwania: 6 miesięcy, 12 miesięcy lub Niestandardowy.

  10. Wybierz Dodaj. Zostanie wyświetlona wygenerowana wartość.

  11. Skopiuj i zapisz wygenerowaną wartość do użycia w kolejnych krokach. Ta wartość jest potrzebna dla plików konfiguracji kodu. Ta wartość nie jest ponownie wyświetlana i nie można jej pobrać w żaden inny sposób. Dlatego przed przejściem do innego ekranu lub okienka pamiętaj, aby zapisać go w witrynie Azure Portal.

  12. Na stronie rejestracji aplikacji wybierz pozycję Uprawnienia interfejsu API w okienku nawigacji, aby otworzyć stronę, na której można dodać dostęp do interfejsów API wymaganych przez aplikację.

  13. Wybierz Dodaj uprawnienie.

  14. Upewnij się, że wybrano kartę Interfejsy API firmy Microsoft.

  15. W sekcji Często używane interfejsy API firmy Microsoft wybierz pozycję Microsoft Graph.

  16. W sekcji Uprawnienia delegowane wybierz pozycję GroupMember.Read.All z listy. W razie potrzeby użyj pola wyszukiwania. To uprawnienie jest niezbędne do uzyskiwania członkostwa w grupach za pośrednictwem programu Graph, jeśli wystąpi scenariusz nadwyżki.

  17. Wybierz przycisk, aby udzielić zgody administratora dla elementu GroupMember.Read.All.

  18. Wybierz Przyznaj uprawnienia.

Tworzenie grup zabezpieczeń

Aby utworzyć grupy zabezpieczeń, wykonaj następujące czynności:

  1. Przejdź do witryny Azure Portal i wybierz pozycję Microsoft Entra ID.

  2. Wybierz pozycję Grupy w okienku nawigacji.

  3. W okienku Grupy wybierz pozycję Nowa grupa, a następnie podaj następujące informacje:

    • W polu Typ grupy wybierz pozycję Zabezpieczenia.
    • W polu Nazwa grupy wprowadź wartość AdminGroup.
    • W polu Opis grupy wprowadź wartość Grupa zabezpieczeń administratora.
    • Dodaj właścicieli grup i członków grupy, których chcesz użyć i przetestować w tym przykładzie.
    • Wybierz pozycję Utwórz.
  4. W okienku Grupy wybierz pozycję Nowa grupa, a następnie podaj następujące informacje:

    • W polu Typ grupy wybierz pozycję Zabezpieczenia.
    • W polu Nazwa grupy wprowadź wartość UserGroup.
    • W polu Opis grupy wprowadź wartość Grupa zabezpieczeń użytkownika.
    • Dodaj właścicieli grup i członków grupy, których chcesz użyć i przetestować w tym przykładzie.
    • Wybierz pozycję Utwórz.

Aby uzyskać więcej informacji, zobacz artykuł Zarządzanie grupami Microsoft Entra i członkostwem w grupach.

Konfigurowanie grup zabezpieczeń usługi

Dostępne są następujące opcje dotyczące dalszego konfigurowania aplikacji w celu odbierania oświadczenia grup:

Uwaga

Aby uzyskać identyfikator grupy samAccountName lokalnej lub On Premises Group Security Identifier zamiast identyfikatora grupy, zobacz sekcję Wymagania wstępne dotyczące używania atrybutów grupy synchronizowane z usługi Active Directory w temacie Konfigurowanie oświadczeń grupy dla aplikacji przy użyciu identyfikatora Entra firmy Microsoft.

Skonfiguruj aplikację, aby otrzymywać wszystkie grupy przypisane do zalogowanego użytkownika, w tym grupy zagnieżdżone

Aby skonfigurować aplikację, wykonaj następujące kroki:

  1. Na stronie rejestracji aplikacji wybierz pozycję Konfiguracja tokenu w okienku nawigacji, aby otworzyć stronę, na której można skonfigurować oświadczenia dostarczone tokeny wystawione dla aplikacji.

  2. Wybierz pozycję Dodaj oświadczenie grup, aby otworzyć ekran Edytowanie oświadczeń grup.

  3. Wybierz pozycję Grupy zabezpieczeń LUB Wszystkie grupy (w tym listy dystrybucyjne, ale nie grupy przypisane do aplikacji). Wybranie obu opcji neguje efekt opcji Grupy zabezpieczeń.

  4. W sekcji Identyfikator wybierz pozycję Identyfikator grupy. To zaznaczenie powoduje, że identyfikator Entra firmy Microsoft wysyła identyfikator obiektu grup, do których użytkownik jest przypisany w oświadczeniu grup tokenu identyfikatora odbieranego przez aplikację po zalogowaniu użytkownika.

Skonfiguruj aplikację, aby otrzymywać wartości oświadczeń grup z filtrowanego zestawu grup, do których może zostać przypisany użytkownik

Ta opcja jest przydatna, gdy spełnione są następujące przypadki:

  • Twoja aplikacja jest zainteresowana wybranym zestawem grup, do których może zostać przypisany użytkownik logowania.
  • Twoja aplikacja nie jest zainteresowana każdą grupą zabezpieczeń, do której ten użytkownik jest przypisany w dzierżawie.

Ta opcja pomaga aplikacji uniknąć problemu z nadwyżką .

Uwaga

Ta funkcja nie jest dostępna w wersji Microsoft Entra ID Free.

Przy użyciu tej opcji zagnieżdżone przypisania grup nie są dostępne.

Aby włączyć tę opcję w aplikacji, wykonaj następujące kroki:

  1. Na stronie rejestracji aplikacji wybierz pozycję Konfiguracja tokenu w okienku nawigacji, aby otworzyć stronę, na której można skonfigurować oświadczenia dostarczone tokeny wystawione dla aplikacji.

  2. Wybierz pozycję Dodaj oświadczenie grup, aby otworzyć ekran Edytowanie oświadczeń grup.

  3. Wybierz pozycję Grupy przypisane do aplikacji i nie wybieraj żadnych innych opcji. Jeśli wybierzesz więcej opcji, takich jak Grupy zabezpieczeń lub Wszystkie grupy (w tym listy dystrybucyjne, ale nie grupy przypisane do aplikacji), te opcje negują efekt grup przypisanych do aplikacji .

  4. W sekcji Identyfikator wybierz pozycję Identyfikator grupy. To zaznaczenie powoduje, że identyfikator Entra firmy Microsoft wysyła identyfikator obiektu grup, do których użytkownik jest przypisany w oświadczeniu grup tokenu identyfikatora odbieranego przez aplikację po zalogowaniu użytkownika.

  5. Jeśli udostępniasz internetowy interfejs API przy użyciu opcji Uwidaczniaj interfejs API , możesz również wybrać opcję Identyfikator grupy w sekcji Dostęp . To zaznaczenie powoduje, że identyfikator Entra firmy Microsoft wysyła identyfikator obiektu grup, do których użytkownik jest przypisany w oświadczeniach grup tokenu dostępu wystawionego dla aplikacji klienckich interfejsu API.

  6. Na stronie rejestracji aplikacji wybierz pozycję Przegląd w okienku nawigacji, aby otworzyć ekran Przegląd aplikacji.

  7. Wybierz hiperlink z nazwą aplikacji w aplikacji zarządzanej w katalogu lokalnym. Ten tytuł pola może zostać obcięty — na przykład aplikacja zarządzana w .... Po wybraniu tego linku przejdź do strony Przegląd aplikacji dla przedsiębiorstw skojarzonej z jednostką usługi dla aplikacji w dzierżawie, w której została utworzona. Możesz wrócić do strony rejestracji aplikacji przy użyciu przycisku Wstecz przeglądarki.

  8. Wybierz pozycję Użytkownicy i grupy w okienku nawigacji, aby otworzyć stronę, na której można przypisać użytkowników i grupy do aplikacji.

  9. Wybierz Dodaj użytkownika.

  10. Wybierz pozycję Użytkownicy i grupy na ekranie wynikowym.

  11. Wybierz grupy, które chcesz przypisać do tej aplikacji.

  12. Wybierz pozycję Wybierz, aby zakończyć wybieranie grup.

  13. Wybierz pozycję Przypisz , aby zakończyć proces przypisywania grupy.

    Aplikacja odbiera teraz wybrane grupy w oświadczeniach grup, gdy użytkownik logujący się do aplikacji jest członkiem jednej lub kilku przypisanych grup.

  14. Wybierz pozycję Właściwości w okienku nawigacji, aby otworzyć stronę zawierającą podstawowe właściwości aplikacji. Ustaw flagę Wymagane przypisanie użytkownika? na Wartość Tak.

Ważne

Po ustawieniu wymaganego przypisania użytkownika? na wartość Tak, identyfikator entra firmy Microsoft sprawdza, czy tylko użytkownicy przypisani do aplikacji w okienku Użytkownicy i grupy będą mogli zalogować się do aplikacji. Możesz przypisywać użytkowników bezpośrednio lub przypisując grupy zabezpieczeń, do których należą.


Skonfiguruj przykładowy kod, aby używać grup rejestracji aplikacji i zabezpieczeń (java-spring-webapp-groups)

Aby skonfigurować aplikację, wykonaj następujące kroki:

Uwaga

W poniższych krokach ClientID jest to samo co Application ID lub AppId.

  1. Otwórz projekt w środowisku IDE.

  2. Otwórz plik src\main\resources\application.yml.

  3. Znajdź symbol zastępczy Enter_Your_Tenant_ID_Here i zastąp istniejącą wartość identyfikatorem dzierżawy firmy Microsoft Entra.

  4. Znajdź symbol zastępczy Enter_Your_Client_ID_Here i zastąp istniejącą wartość identyfikatorem aplikacji lub clientId java-spring-webapp-groups aplikacją skopiowaną z witryny Azure Portal.

  5. Znajdź symbol zastępczy Enter_Your_Client_Secret_Here i zastąp istniejącą wartość wartością zapisaną podczas tworzenia java-spring-webapp-groups kopii z witryny Azure Portal.

  6. Znajdź symbol zastępczy Enter_Your_Admin_Group_ID_Here i zastąp istniejącą wartość wartością objectId elementu AdminGroup.

  7. Znajdź symbol zastępczy Enter_Your_User_Group_ID_Here i zastąp istniejącą wartość wartością objectId elementu UserGroup.

  8. Otwórz plik src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/SampleController.java .

  9. Znajdź symbol zastępczy Enter_Your_Admin_Group_ID_Here i zastąp istniejącą wartość wartością objectId elementu AdminGroup.

  10. Znajdź symbol zastępczy Enter_Your_User_Group_ID_Here i zastąp istniejącą wartość wartością objectId elementu UserGroup.

Uruchamianie aplikacji przykładowej

W poniższych sekcjach pokazano, jak wdrożyć przykład w usłudze Azure Container Apps.

Wymagania wstępne

Przygotowywanie projektu Spring

Aby przygotować projekt, wykonaj następujące czynności:

  1. Użyj następującego polecenia narzędzia Maven , aby skompilować projekt:

    mvn clean verify
    
  2. Uruchom przykładowy projekt lokalnie, używając następującego polecenia:

    mvn spring-boot:run
    

Ustawienia

Aby zalogować się do platformy Azure z poziomu interfejsu wiersza polecenia, uruchom następujące polecenie i postępuj zgodnie z monitami, aby ukończyć proces uwierzytelniania.

az login

Aby upewnić się, że używasz najnowszej wersji interfejsu wiersza polecenia, uruchom polecenie uaktualniania.

az upgrade

Następnie zainstaluj lub zaktualizuj rozszerzenie usługi Azure Container Apps dla interfejsu wiersza polecenia.

Jeśli podczas uruchamiania az containerapp poleceń w interfejsie wiersza polecenia platformy Azure wystąpią błędy dotyczące brakujących parametrów, upewnij się, że masz zainstalowaną najnowszą wersję rozszerzenia Azure Container Apps.

az extension add --name containerapp --upgrade

Uwaga

Począwszy od maja 2024 r., rozszerzenia interfejsu wiersza polecenia platformy Azure domyślnie nie włączają funkcji w wersji zapoznawczej. Aby uzyskać dostęp do funkcji usługi Container Apps w wersji zapoznawczej, zainstaluj rozszerzenie Container Apps za pomocą polecenia --allow-preview true.

az extension add --name containerapp --upgrade --allow-preview true

Teraz, po zainstalowaniu bieżącego rozszerzenia lub modułu Microsoft.App , zarejestruj przestrzenie nazw i Microsoft.OperationalInsights .

Uwaga

Zasoby usługi Azure Container Apps zostały zmigrowane z Microsoft.Web przestrzeni nazw do Microsoft.App przestrzeni nazw. Aby uzyskać więcej informacji, zobacz Migracja przestrzeni nazw z witryny Microsoft.Web do Microsoft.App w marcu 2022 r.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Tworzenie środowiska usługi Azure Container Apps

Teraz, gdy konfiguracja interfejsu wiersza polecenia platformy Azure została ukończona, możesz zdefiniować zmienne środowiskowe używane w tym artykule.

Zdefiniuj następujące zmienne w powłoce powłoki bash.

export RESOURCE_GROUP="ms-identity-containerapps"
export LOCATION="canadacentral"
export ENVIRONMENT="env-ms-identity-containerapps"
export API_NAME="ms-identity-api"
export JAR_FILE_PATH_AND_NAME="./target/ms-identity-spring-boot-webapp-0.0.1-SNAPSHOT.jar"

Utwórz grupę zasobów.

az group create  \
    --name $RESOURCE_GROUP \
    --location $LOCATION \

Utwórz środowisko z automatycznie wygenerowanym obszarem roboczym usługi Log Analytics.

az containerapp env create \
    --name $ENVIRONMENT \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION

Pokaż domyślną domenę środowiska aplikacji kontenera. Zanotuj tę domenę do użycia w kolejnych sekcjach.

az containerapp env show \
    --name $ENVIRONMENT \
    --resource-group $RESOURCE_GROUP \
    --query properties.defaultDomain

Przygotowywanie aplikacji do wdrożenia

Podczas wdrażania aplikacji w usłudze Azure Container Apps adres URL przekierowania zmienia się na adres URL przekierowania wdrożonego wystąpienia aplikacji w usłudze Azure Container Apps. Wykonaj następujące kroki, aby zmienić te ustawienia w pliku application.yml :

  1. Przejdź do pliku src\main\resources\application.yml aplikacji i zmień wartość post-logout-redirect-uri na nazwę domeny wdrożonej aplikacji, jak pokazano w poniższym przykładzie. Pamiętaj, aby zastąpić <API_NAME> wartości i <default-domain-of-container-app-environment> wartościami rzeczywistymi. Na przykład w przypadku domeny domyślnej dla środowiska aplikacji kontenera platformy Azure z poprzedniego kroku i ms-identity-api nazwy aplikacji należy użyć https://ms-identity-api.<default-domain> wartości post-logout-redirect-uri .

    post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
    
  2. Po zapisaniu tego pliku użyj następującego polecenia, aby ponownie skompilować aplikację:

    mvn clean package
    

Ważne

Plik application.yml aplikacji przechowuje obecnie wartość klucza tajnego klienta w parametrze client-secret . Nie jest dobrym rozwiązaniem, aby zachować tę wartość w tym pliku. Jeśli zatwierdzisz plik w repozytorium Git, możesz również podejmowania ryzyka. Aby zapoznać się z zalecanym podejściem, zobacz Zarządzanie wpisami tajnymi w usłudze Azure Container Apps.

Aktualizowanie rejestracji aplikacji Microsoft Entra ID

Ponieważ identyfikator URI przekierowania zmienia się w wdrożonej aplikacji w usłudze Azure Container Apps, musisz również zmienić identyfikator URI przekierowania w rejestracji aplikacji Microsoft Entra ID. Aby wprowadzić tę zmianę, wykonaj następujące czynności:

  1. Przejdź do strony Platforma tożsamości Microsoft dla deweloperów Rejestracje aplikacji.

  2. Użyj pola wyszukiwania, aby wyszukać rejestrację aplikacji — na przykład java-servlet-webapp-authentication.

  3. Otwórz rejestrację aplikacji, wybierając jej nazwę.

  4. Wybierz Uwierzytelnianie z menu poleceń.

  5. W sekcji Identyfikatory URI przekierowania sieci Web - wybierz pozycję Dodaj identyfikator URI.

  6. Wypełnij identyfikator URI aplikacji, dołączając /login/oauth2/code/ na przykład https://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/.

  7. Wybierz pozycję Zapisz.

Wdrażanie aplikacji

Wdróż pakiet JAR w usłudze Azure Container Apps.

Uwaga

W razie potrzeby możesz określić wersję zestawu JDK w zmiennych środowiskowych kompilacji języka Java. Aby uzyskać więcej informacji, zobacz Kompilowanie zmiennych środowiskowych dla języka Java w usłudze Azure Container Apps.

Teraz możesz wdrożyć plik WAR za pomocą polecenia interfejsu az containerapp up wiersza polecenia.

az containerapp up \
    --name $API_NAME \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --environment $ENVIRONMENT \
    --artifact <JAR_FILE_PATH_AND_NAME> \
    --ingress external \
    --target-port 8080 \
    --query properties.configuration.ingress.fqdn

Uwaga

Domyślna wersja zestawu JDK to 17. Jeśli musisz zmienić wersję zestawu JDK pod kątem zgodności z aplikacją, możesz użyć argumentu --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION> , aby dostosować numer wersji.

Aby uzyskać więcej zmiennych środowiskowych kompilacji, zobacz Build environment variables for Java in Azure Container Apps (Tworzenie zmiennych środowiskowych dla języka Java w usłudze Azure Container Apps).

Weryfikowanie aplikacji

W tym przykładzie containerapp up polecenie zawiera --query properties.configuration.ingress.fqdn argument, który zwraca w pełni kwalifikowaną nazwę domeny (FQDN), znany również jako adres URL aplikacji. Wykonaj następujące kroki, aby sprawdzić dzienniki aplikacji w celu zbadania dowolnego problemu z wdrażaniem:

  1. Uzyskaj dostęp do adresu URL aplikacji wyjściowej na stronie Dane wyjściowe sekcji Wdrażanie.

  2. W okienku nawigacji na stronie Przegląd wystąpienia usługi Azure Container Apps wybierz pozycję Dzienniki, aby sprawdzić dzienniki aplikacji.

Eksplorowanie przykładu

Aby zapoznać się z przykładem, wykonaj następujące czynności:

  1. Zwróć uwagę na stan logowania lub wylogowania wyświetlany na środku ekranu.
  2. Wybierz przycisk kontekstowy w rogu. Ten przycisk odczytuje pozycję Zaloguj po pierwszym uruchomieniu aplikacji. Alternatywnie wybierz szczegóły tokenu, tylko administratorzy lub zwykłych użytkowników. Ponieważ te strony są chronione i wymagają uwierzytelniania, nastąpi automatyczne przekierowanie do strony logowania.
  3. Na następnej stronie postępuj zgodnie z instrukcjami i zaloguj się przy użyciu konta w dzierżawie Microsoft Entra ID.
  4. Na ekranie zgody zwróć uwagę na żądane zakresy.
  5. Po pomyślnym zakończeniu przepływu logowania powinno nastąpić przekierowanie do strony głównej , która pokazuje stan logowania — lub jedną z pozostałych stron, w zależności od tego, który przycisk wyzwolił przepływ logowania.
  6. Zwróć uwagę, że przycisk kontekstowy zawiera teraz pozycję Wyloguj się i wyświetla swoją nazwę użytkownika.
  7. Jeśli jesteś na stronie głównej, wybierz pozycję Szczegóły tokenu identyfikatora, aby wyświetlić niektóre zdekodowane oświadczenia tokenu identyfikatora, w tym grupy.
  8. Wybierz pozycję Tylko administratorzy, aby wyświetlić element /admin_only. Tylko użytkownicy należący do AdminGroup grupy zabezpieczeń mogą wyświetlać tę stronę. W przeciwnym razie zostanie wyświetlony komunikat o niepowodzeniu autoryzacji.
  9. Wybierz pozycję Regular Users (Regular Users ), aby wyświetlić /regular_user stronę. Tylko użytkownicy należący do UserGroup grupy zabezpieczeń mogą wyświetlać tę stronę. W przeciwnym razie zostanie wyświetlony komunikat o niepowodzeniu autoryzacji.
  10. Użyj przycisku w rogu, aby się wylogować. Strona stanu odzwierciedla nowy stan.

Informacje o kodzie

W tym przykładzie pokazano, jak używać biblioteki klienta Microsoft Entra ID Spring Boot Starter dla języka Java do logowania użytkowników do dzierżawy microsoft Entra ID. Przykład korzysta również z szablonów startowych Spring Oauth2 Client i Spring Web Boot. W przykładzie użyto oświadczeń z tokenu identyfikatora uzyskanego z identyfikatora firmy Microsoft w celu wyświetlenia szczegółów zalogowanego użytkownika oraz ograniczenia dostępu do niektórych stron przy użyciu oświadczenia grup na potrzeby autoryzacji.

Zawartość

W poniższej tabeli przedstawiono zawartość przykładowego folderu projektu:

Plik/folder opis
pom.xml Zależności aplikacji.
src/main/resources/templates/ Szablony Thymeleaf dla interfejsu użytkownika.
src/main/resources/application.yml Konfiguracja biblioteki startowej rozruchu aplikacji i programu Microsoft Entra ID.
src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ Ten katalog zawiera główne klasy wejścia aplikacji, kontrolera i konfiguracji.
.../MsIdentitySpringBootWebappApplication.java Klasa główna.
.../SampleController.java Kontroler z mapowaniami punktów końcowych.
.../SecurityConfig.java Konfiguracja zabezpieczeń — na przykład trasy wymagają uwierzytelniania.
.../Utilities.java Klasa narzędzia — na przykład filtruj oświadczenia tokenu identyfikatora.
CHANGELOG.md Lista zmian w przykładzie.
CONTRIBUTING.md Wskazówki dotyczące współtworzenia przykładu.
LICENCJA Licencja dla przykładu.

Oświadczenia tokenu identyfikatora

Aby wyodrębnić szczegóły tokenu, aplikacja korzysta z obiektów i OidcUser obiektów spring security AuthenticationPrincipal w mapowaniu żądania, jak pokazano w poniższym przykładzie. Zobacz Przykładowy kontroler, aby uzyskać szczegółowe informacje na temat sposobu korzystania z oświadczeń tokenu identyfikatora.

import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
//...
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
    Map<String, Object> claims = principal.getIdToken().getClaims();
}

Przetwarzanie oświadczenia grup w tokenie identyfikatora

Oświadczenie grup tokenu zawiera nazwy grup przypisanych do zalogowanego użytkownika, jak pokazano w poniższym przykładzie:

{
  ...
  "groups": [
    "xyz-id-xyz",
    "xyz-id-xyz",]
  ...
}

Typowy sposób uzyskiwania dostępu do nazw grup jest udokumentowany w sekcji oświadczeń tokenu identyfikatora .

Program Microsoft Entra ID Boot Starter w wersji 3.5 lub nowszej automatycznie analizuje oświadczenia grup i dodaje każdą grupę do zalogowanych użytkowników Authorities. Ta konfiguracja umożliwia deweloperom korzystanie z grup z adnotacjami warunku spring PrePost przy użyciu hasAuthority metody . Na przykład w SampleController.java można znaleźć następujące @PreAuthorize warunki:

@GetMapping(path = "/admin_only")
@PreAuthorize("hasAuthority('enter-admin-group-id-here')")
public String adminOnly(Model model) {
    // restrict to users who belong to AdminGroup
}
@GetMapping(path = "/regular_user")
@PreAuthorize("hasAnyAuthority('enter-user-group-id-here','enter-admin-group-id-here')")
public String regularUser(Model model) {
    // restrict to users who belong to any of UserGroup or AdminGroup
}

Poniższy kod pobiera pełną listę urzędów dla danego użytkownika:

@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
   Collection<? extends GrantedAuthority> authorities = principal.getAuthorities();
}

W przypadku logowania aplikacja wysyła żądanie do punktu końcowego logowania Microsoft Entra ID automatycznie skonfigurowanego przez bibliotekę klienta Microsoft Entra ID Spring Boot Starter dla języka Java, jak pokazano w poniższym przykładzie:

<a class="btn btn-success" href="/oauth2/authorization/azure">Sign In</a>

W przypadku wylogowania aplikacja wysyła żądanie POST do punktu końcowego logout , jak pokazano w poniższym przykładzie:

<form action="#" th:action="@{/logout}" method="post">
  <input class="btn btn-warning" type="submit" value="Sign Out" />
</form>

Elementy interfejsu użytkownika zależne od uwierzytelniania

Aplikacja ma prostą logikę na stronach szablonu interfejsu użytkownika do określania zawartości do wyświetlenia na podstawie tego, czy użytkownik jest uwierzytelniony, jak pokazano w poniższym przykładzie przy użyciu tagów Spring Security Thymeleaf:

<div sec:authorize="isAuthenticated()">
  this content only shows to authenticated users
</div>
<div sec:authorize="isAnonymous()">
  this content only shows to not-authenticated users
</div>

Ochrona tras za pomocą polecenia AADWebSecurityConfigurerAdapter

Domyślnie aplikacja chroni strony Szczegóły tokenu identyfikatora, Tylko administratorzy i Użytkownicy regularni , aby tylko zalogowani użytkownicy mogli uzyskiwać do nich dostęp. Aplikacja konfiguruje te trasy przy użyciu app.protect.authenticated właściwości z pliku application.yml . Aby skonfigurować określone wymagania aplikacji, możesz rozszerzyć AADWebSecurityConfigurationAdapter w jednej z klas. Aby zapoznać się z przykładem, zobacz klasę SecurityConfig tej aplikacji, pokazaną w następującym kodzie:

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends AADWebSecurityConfigurerAdapter{
  @Value( "${app.protect.authenticated}" )
  private String[] protectedRoutes;

    @Override
    public void configure(HttpSecurity http) throws Exception {
    // use required configuration form AADWebSecurityAdapter.configure:
    super.configure(http);
    // add custom configuration:
    http.authorizeRequests()
      .antMatchers(protectedRoutes).authenticated()     // limit these pages to authenticated users (default: /token_details, /admin_only, /regular_user)
      .antMatchers("/**").permitAll();                  // allow all other routes.
    }
}

Oświadczenie dotyczące nadwyżki grup

Aby upewnić się, że rozmiar tokenu nie przekracza limitów rozmiaru nagłówka HTTP, Platforma tożsamości Microsoft ogranicza liczbę identyfikatorów obiektów uwzględnionych w oświadczeniach grup.

Limit nadwyżki wynosi 150 dla tokenów SAML, 200 dla tokenów JWT, 6 dla aplikacji jednostronicowych. Jeśli użytkownik jest członkiem większej liczby grup niż limit nadwyżkowy, Platforma tożsamości Microsoft nie emituje identyfikatorów grup w oświadczeniach grup w tokenie. Zamiast tego zawiera oświadczenie nadwyżkowe w tokenie wskazującym aplikacji na wykonywanie zapytań względem interfejsu API programu Microsoft Graph w celu pobrania członkostwa w grupie użytkownika.

Program Microsoft Entra ID Boot Starter w wersji 3.5 lub nowszej automatycznie analizuje oświadczenia grup i dodaje każdą grupę do zalogowanych użytkowników Authorities. Narzędzie starter automatycznie obsługuje scenariusz nadwyżki grup.

Uwaga

Zdecydowanie zalecamy użycie funkcji filtrowania grup, jeśli jest to możliwe, aby uniknąć nadmiernego użycia grup. Aby uzyskać więcej informacji, zobacz sekcję Konfigurowanie aplikacji w celu odbierania wartości oświadczeń grup z filtrowanego zestawu grup, do których może zostać przypisany użytkownik.

Tworzenie scenariusza nadwyżkowego na potrzeby testowania

Możesz użyć pliku BulkCreateGroups.ps1 udostępnionego w folderze AppCreationScripts , aby utworzyć dużą liczbę grup i przypisać do nich użytkowników. Ten plik pomaga przetestować scenariusze nadwyżkowe podczas programowania. Pamiętaj, aby zmienić ustawienia podane przez użytkownika objectId w skrypcie BulkCreateGroups.ps1 .

Obsługa nadwyżki wymaga wywołania programu Microsoft Graph w celu odczytania członkostwa w grupach zalogowanego użytkownika, dlatego aplikacja musi mieć uprawnienia User.Read i GroupMember.Read.All , aby funkcja getMemberGroups została wykonana pomyślnie.

Ważne

W scenariuszu nadwyżkowym upewnij się, że masz przyznane Admin Consent zakres interfejsu API GroupMember.Read.All programu Microsoft Graph zarówno dla aplikacji klienckich, jak i aplikacji usług. Aby uzyskać więcej informacji, zobacz kroki rejestracji aplikacji we wcześniejszej sekcji tego artykułu.

Aktualizowanie rejestracji aplikacji Microsoft Entra ID (java-spring-webapp-groups)

Aby zaktualizować rejestrację aplikacji, wykonaj następujące kroki:

  1. Wróć do witryny Azure Portal.

  2. W okienku nawigacji wybierz pozycję Azure Active Directory, a następnie wybierz pozycję Rejestracje aplikacji (wersja zapoznawcza).

  3. Na wyświetlonym ekranie wybierz aplikację java-spring-webapp-groups .

  4. Na stronie rejestracji aplikacji wybierz pozycję Uwierzytelnianie z menu.

  5. W sekcji Identyfikatory URI przekierowania zaktualizuj adresy URL odpowiedzi, aby odpowiadały adresowi URL witryny wdrożenia platformy Azure — na przykład https://java-spring-webapp-groups.azurewebsites.net/login/oauth2/code/.

Ważne

Jeśli aplikacja korzysta z magazynu w pamięci, usługa aplikacja systemu Azure uruchamia witrynę internetową, jeśli jest nieaktywna, a wszystkie rekordy, które przechowywano w aplikacji, są opróżniane. Ponadto w przypadku zwiększenia liczby wystąpień witryny internetowej żądania są dystrybuowane między wystąpieniami. W związku z tym rekordy aplikacji nie są takie same w każdym wystąpieniu.

Więcej informacji

Aby uzyskać więcej informacji na temat sposobu działania protokołów OAuth 2.0 w tym scenariuszu i innych scenariuszach, zobacz Scenariusze uwierzytelniania dla identyfikatora Entra firmy Microsoft.