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

W tym artykule pokazano, jak utworzyć aplikację Java WebSphere, która loguje użytkowników przy użyciu biblioteki Microsoft Authentication Library (MSAL) dla języka Java. Aplikacja ogranicza również 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 MSAL dla języka Java (MSAL4J), aby umożliwić użytkownikom logowanie do dzierżawy Microsoft Entra ID i uzyskanie z usługi Microsoft Entra ID tokenu identyfikatora. Token ID potwierdza, że użytkownik jest uwierzytelniony w tej dzierżawie. Aplikacja chroni swoje trasy zgodnie ze stanem uwierzytelniania użytkownika i członkostwem w grupie.

Aby obejrzeć film omawiający ten scenariusz, zobacz Implementowanie autoryzacji w aplikacjach przy użyciu ról aplikacji, grup zabezpieczeń, zakresów i ról katalogowych.

Wymagania wstępne

  • JDK w wersji 8 lub nowszej
  • Maven 3
  • Dzierżawa Microsoft Entra ID. Aby uzyskać więcej informacji, zobacz Jak uzyskać dzierżawę Microsoft Entra ID.
  • Konto użytkownika we własnym locatancie Microsoft Entra ID.
  • Dwie grupy zabezpieczeń, i , zawierające użytkowników, których chcesz użyć do testów.
  • WebSphere
  • Visual Studio Code
  • Narzędzia platformy Azure dla programu Visual Studio Code

Zalecenia

  • Podstawowa znajomość serwletów Java / Jakarta.
  • Pewna znajomość terminalu systemu Linux/OSX.
  • jwt.ms do inspekcji tokenów.
  • Fiddler do monitorowania aktywności sieciowej i diagnozowania problemów.
  • Śledź blog Microsoft Entra, aby być na bieżąco z najnowszymi informacjami.

Skonfiguruj przykład

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 3-java-servlet-web-app/3-Authorization-II/groups

Alternatywnie, przejdź do repozytorium ms-identity-msal-java-samples, a następnie pobierz je jako plik .zip i rozpakuj na dysku twardym.

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.

Zarejestruj przykładową aplikację w dzierżawie Microsoft Entra ID

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ć swoje aplikacje

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

  1. Zaloguj się do portalu Azure.

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

Zarejestruj aplikację (java-servlet-webapp-groups)

Najpierw zarejestruj nową aplikację w portalu Azure, postępując zgodnie z instrukcjami w przewodniku Szybki start: rejestrowanie aplikacji przy użyciu platformy tożsamości firmy Microsoft.

Następnie wykonaj następujące kroki, aby ukończyć rejestrację:

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

  2. Wybierz opcjęNowa rejestracja.

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

    • W sekcji Nazwa wprowadź sensowną nazwę aplikacji wyświetlaną użytkownikom aplikacji — na przykład .
    • W obszarze Obsługiwane typy kont wybierz pozycję Tylko konta w tym katalogu organizacyjnym.
    • W sekcji Identyfikator URI przekierowania wybierz opcję Sieć Web w polu kombi i wprowadź następujący identyfikator URI przekierowania: .
  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. Używasz tej wartości w pliku konfiguracyjnym aplikacji lub w plikach konfiguracyjnych aplikacji.

  6. Wybierz Zapisz, aby zapisać zmiany.

  7. Na stronie rejestracji aplikacji wybierz pozycję Certificates & secrets w panelu nawigacyjnym, aby otworzyć stronę, na której można wygenerować klucze tajne i przekazać certyfikaty.

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

  9. Wpisz opis — na przykład klucz tajny aplikacji.

  10. Wybierz datę wygaśnięcia klucza tajnego lub określ niestandardowy okres ważności. Klucze tajne klienta mogą mieć maksymalny okres ważności wynoszący 24 miesiące, a firma Microsoft zaleca okres ważności krótszy niż 12 miesięcy. W przypadku aplikacji produkcyjnych preferuj certyfikat lub poświadczenie federacyjne tożsamości zamiast klucza tajnego klienta.

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

  12. 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.

  13. Na stronie rejestracji aplikacji wybierz w okienku nawigacyjnym pozycję Uprawnienia interfejsu API, aby otworzyć stronę umożliwiającą dodanie dostępu do interfejsów API, których wymaga aplikacja.

  14. Wybierz Dodaj uprawnienie.

  15. Upewnij się, że wybrano kartę Microsoft APIs.

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

  17. W sekcji Uprawnienia delegowane wybierz z listy User.Read i GroupMember.Read.All. W razie potrzeby użyj pola wyszukiwania.

  18. Wybierz Dodaj uprawnienia.

  19. wymaga zgody administratora, więc wybierz Udziel/wycofaj zgodę administratora dla {tenant}, a następnie wybierz Tak, gdy pojawi się pytanie, czy chcesz udzielić zgody na żądane uprawnienia dla wszystkich kont w dzierżawie. Aby wykonać tę czynność, musisz być administratorem dzierżawy Microsoft Entra ID.


Skonfiguruj aplikację (java-servlet-webapp-groups) tak, aby korzystała z Twojej rejestracji aplikacji

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

Uwaga

W poniższych krokach oznacza to samo co lub .

  1. Otwórz projekt w środowisku IDE.

  2. Otwórz plik ./src/main/resources/authentication.properties.

  3. Znajdź ciąg znaków . Zastąp istniejącą wartość identyfikatorem dzierżawy Microsoft Entra, jeśli aplikacja została zarejestrowana przy użyciu opcji Konta tylko w tym katalogu organizacyjnym.

  4. Znajdź ciąg znaków i zastąp istniejącą wartość identyfikatorem aplikacji lub aplikacji , skopiowanym z portalu Azure.

  5. Znajdź ciąg i zastąp istniejącą wartość wartością zapisaną podczas tworzenia aplikacji w portalu Azure.

Skonfiguruj grupy zabezpieczeń

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

  • Odbierz wszystkie grupy przypisane do zalogowanego użytkownika w dzierżawie Microsoft Entra ID, w tym grupy zagnieżdżone. Aby uzyskać więcej informacji, zobacz sekcję Konfigurowanie aplikacji w celu odbierania informacji o wszystkich grupach, do których przypisano zalogowanego użytkownika, w tym grupach zagnieżdżonych.

  • Odbierz wartości oświadczeń grup z filtrowanego zestawu grup, z którymi aplikacja jest zaprogramowana do pracy. Aby uzyskać więcej informacji, zobacz sekcję Konfigurowanie aplikacji tak, aby odbierała wartości oświadczenia grup z filtrowanego zestawu grup, do których może być przypisany użytkownik. Ta opcja nie jest dostępna w edycji Microsoft Entra ID Free.

Uwaga

Aby uzyskać dla grupy lokalnej wartości lub zamiast identyfikatora grupy, zobacz sekcję Wymagania wstępne dotyczące używania atrybutów grup synchronizowanych z usługą Active Directory w artykule Konfigurowanie oświadczeń grup dla aplikacji przy użyciu Microsoft Entra ID.

Skonfiguruj aplikację tak, aby odbierała wszystkie grupy, do których przypisano zalogowanego użytkownika, w tym grupy zagnieżdżone

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

  1. Na stronie rejestracji aplikacji w panelu nawigacji wybierz pozycję Token Configuration, aby otworzyć stronę, na której można skonfigurować oświadczenia zawarte w tokenach wystawianych dla aplikacji.

  2. Wybierz Dodaj oświadczenie grup, aby otworzyć ekran Edytowanie oświadczenia grup.

  3. Wybierz opcję Grupy zabezpieczeń LUB Wszystkie grupy (w tym listy dystrybucyjne, ale nie grupy przypisane do aplikacji). Wybranie obu opcji niweluje działanie opcji Security Groups.

  4. W sekcji ID wybierz Identyfikator grupy. Wybranie tej opcji powoduje, że usługa Microsoft Entra ID wysyła identyfikator obiektu grup, do których przypisany jest użytkownik, w roszczeniu groups w tokenie ID, który aplikacja otrzymuje po zalogowaniu się 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 nadmiarowości.

Uwaga

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

W przypadku użycia 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 w panelu nawigacji wybierz pozycję Token Configuration, aby otworzyć stronę, na której można skonfigurować oświadczenia zawarte w tokenach wystawianych dla aplikacji.

  2. Wybierz Dodaj oświadczenie grup, aby otworzyć ekran Edytowanie oświadczenia grup.

  3. Wybierz pozycję Grupy przypisane do aplikacji.

    Wybieranie innych opcji — takich jak Grupy zabezpieczeń lub Wszystkie grupy (w tym listy dystrybucyjne, ale nie przypisane do aplikacji) — neguje korzyści wynikające z korzystania z tej opcji przez aplikację.

  4. W sekcji ID wybierz Identyfikator grupy. Ten wybór powoduje, że usługa Microsoft Entra ID wysyła identyfikator obiektu grup, do których przypisano użytkownika, w oświadczeniu grup tokenu ID.

  5. Jeśli udostępniasz interfejs API sieci Web za pomocą opcji Udostępnij interfejs API, możesz również wybrać opcję Identyfikator grupy w sekcji Dostęp. Ta opcja powoduje, że usługa Microsoft Entra ID wysyła identyfikator obiektu grup, do których przypisano użytkownika, w oświadczeniu grup tokenu dostępu.

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

  7. Wybierz hiperłącze z nazwą swojej aplikacji w Aplikacja zarządzana w katalogu lokalnym. Tytuł tego pola może być ucięty — na przykład: . Po wybraniu tego linku zostaniesz przeniesiony do strony Przegląd aplikacji dla przedsiębiorstw skojarzonej z nazwą główną usługi dla Twojej aplikacji w dzierżawie, w której ją utworzono. 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 Przypisz, aby dokoń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 opcji Przypisanie użytkownika jest wymagane? na Tak usługa Microsoft Entra ID sprawdza, czy tylko użytkownicy przypisani do aplikacji w okienku Użytkownicy i grupy mogą się do niej zalogować. Możesz przypisywać użytkowników bezpośrednio lub przypisując grupy zabezpieczeń, do których należą.

Konfigurowanie aplikacji (java-servlet-webapp-groups) w celu rozpoznawania identyfikatorów grup

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

Ważne

Na stronie Konfiguracja tokenu, jeśli wybierzesz dowolną opcję inną niż groupID — na przykład DNSDomain\sAMAccountName — w kolejnych krokach należy wprowadzić nazwę grupy — na przykład — zamiast identyfikatora obiektu:

  1. Otwórz plik ./src/main/resources/authentication.properties.

  2. Znajdź ciąg znaków i zastąp istniejącą wartość identyfikatorem obiektu grupy , skopiowanym z portalu Azure. Usuń również nawiasy klamrowe z wartości symbolu zastępczego.

  3. Znajdź ciąg znaków i zastąp istniejącą wartość identyfikatorem obiektu grupy , skopiowanym z portalu Azure. Usuń również nawiasy klamrowe z wartości symbolu zastępczego.

Skompiluj przykład

Aby skompilować przykład przy użyciu narzędzia Maven, przejdź do katalogu zawierającego plik pom.xml dla przykładu, a następnie uruchom następujące polecenie:

mvn clean package

To polecenie generuje plik war , który można uruchomić na różnych serwerach aplikacji.

Uruchamianie aplikacji przykładowej

W tych instrukcjach przyjęto założenie, że zainstalowano aplikację WebSphere i skonfigurowano serwer. Możesz skorzystać ze wskazówek zawartych w Deploy WebSphere Application Server (traditional) Cluster on Azure Virtual Machines na potrzeby podstawowej konfiguracji serwera.

Przed wdrożeniem w usłudze WebSphere wykonaj następujące kroki, aby wprowadzić pewne zmiany konfiguracji w samym przykładzie, a następnie skompilować lub ponownie skompilować pakiet:

  1. Przejdź do pliku authentication.properties aplikacji i zmień wartość na adres URL serwera oraz numer portu, których zamierzasz użyć, jak pokazano w poniższym przykładzie:

    # app.homePage is by default set to dev server address and app context path on the server
    # for apps deployed to azure, use https://your-sub-domain.azurewebsites.net
    app.homePage=https://<server-url>:<port-number>/msal4j-servlet-auth/
    
  2. Po zapisaniu tego pliku użyj następującego polecenia, aby ponownie skompilować aplikację:

    mvn clean package
    
  3. Po zakończeniu kompilacji skopiuj plik .war do systemu plików na serwerze docelowym.

Musisz również wprowadzić tę samą zmianę w rejestracji aplikacji Azure, gdzie ustawiasz ją w portalu Azure jako wartość Redirect URI na karcie Authentication.

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

  2. Użyj pola wyszukiwania, aby znaleźć rejestrację aplikacji — na przykład .

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

  4. Wybierz Uwierzytelnianie z menu.

  5. W sekcji WebIdentyfikatory URI przekierowania wybierz pozycję Dodaj identyfikator URI.

  6. Wpisz identyfikator URI swojej aplikacji, dodając na końcu /auth/redirect — na przykład .

  7. Wybierz Zapisz.

Wykonaj następujące kroki, aby wdrożyć przykład przy użyciu konsoli zintegrowanych rozwiązań WebSphere:

  1. Na karcie Aplikacje wybierz pozycję Nowa aplikacja, a następnie pozycję Nowa aplikacja dla przedsiębiorstw.

  2. Wybierz utworzony plik .war, a następnie wybieraj przycisk Dalej, aż przejdziesz do kroku instalacji Mapowanie ścieżek głównych kontekstu dla modułów sieci Web. Inne ustawienia domyślne powinny być poprawne.

  3. Dla głównego kontekstu ustaw taką samą wartość jak ta występująca po numerze portu w elemencie „Redirect URI” ustawionym w przykładowej konfiguracji / rejestracji aplikacji w Azure. Oznacza to, że jeśli URI przekierowania to , główny katalog kontekstu powinien mieć wartość .

  4. Wybierz Zakończ.

  5. Po zakończeniu instalowania aplikacji przejdź do sekcji Aplikacje dla przedsiębiorstw WebSphere na karcie Aplikacje .

  6. Wybierz z listy aplikacji zainstalowany plik .war, a następnie wybierz opcję Uruchom, aby wdrożyć.

  7. Po zakończeniu wdrażania przejdź do , a aplikacja powinna być widoczna.

Poznaj przykład

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 ma napis Zaloguj się przy pierwszym uruchomieniu aplikacji.
  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. Zwróć uwagę, że przycisk kontekstowy zawiera teraz pozycję Wyloguj się i wyświetla swoją nazwę użytkownika.
  6. Wybierz pozycję Szczegóły tokenu identyfikatora, aby zobaczyć niektóre zdekodowane oświadczenia tokenu identyfikatora.
  7. Wybierz pozycję Grupy , aby wyświetlić wszelkie informacje o członkostwie w grupie zabezpieczeń dla zalogowanego użytkownika.
  8. Wybierz Tylko administrator lub Zwykły użytkownik, aby uzyskać dostęp do punktów końcowych chronionych deklaracją grup.
    • Jeśli zalogowany użytkownik należy do grupy , może wejść na obie strony.
    • Jeśli zalogowany użytkownik znajduje się w grupie , może wejść tylko na stronę Regular User.
    • Jeśli zalogowany użytkownik nie znajduje się w żadnej grupie, użytkownik nie może uzyskać dostępu do żadnej z dwóch stron.
  9. Użyj przycisku w rogu, aby się wylogować.
  10. Po wylogowaniu wybierz Szczegóły tokenu identyfikatora, aby zobaczyć, że aplikacja wyświetla błąd zamiast oświadczeń tokenu ID, gdy użytkownik nie jest autoryzowany.

Informacje o kodzie

W tym przykładzie użyto biblioteki MSAL dla języka Java (MSAL4J), aby zalogować użytkownika i uzyskać token identyfikatora, który może zawierać oświadczenie grup. Jeśli w tokenie identyfikatora jest zbyt wiele grup, aby można było je w nim uwzględnić, w przykładzie użyto zestawu Microsoft Graph SDK dla języka Java do uzyskania z usługi Microsoft Graph danych o członkostwie w grupach. Na podstawie grup, do których należy użytkownik, zalogowany użytkownik może uzyskać dostęp do żadnej, jednej lub obu chronionych stron: i .

Jeśli chcesz odtworzyć działanie tego przykładu, musisz dodać biblioteki MSAL4J i Microsoft Graph SDK do swoich projektów za pomocą Mavena. Możesz skopiować plik pom.xml oraz zawartość folderów helpers i authservlets z folderu src/main/java/com/microsoft/azuresamples/msal4j. Potrzebny jest również plik authentication.properties. Te klasy i pliki zawierają kod ogólny, którego można użyć w szerokiej gamie aplikacji. Możesz również skopiować resztę przykładu, ale inne klasy i pliki są kompilowane specjalnie w celu rozwiązania tego przykładu celu.

Zawartość

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

Plik/folder Opis
src/main/java/com/microsoft/azuresamples/msal4j/groupswebapp/ Ten katalog zawiera klasy definiujące logikę biznesową zaplecza aplikacji.
src/main/java/com/microsoft/azuresamples/msal4j/authservlets/ Ten katalog zawiera klasy używane do logowania i wylogowyywania punktów końcowych.
*Servlet.java Wszystkie dostępne punkty końcowe są definiowane w klasach Języka Java z nazwami kończącymi się na Servlet.
src/main/java/com/microsoft/azuresamples/msal4j/helpers/ Klasy pomocnicze do uwierzytelniania.
AuthenticationFilter.java Przekierowuje nieuwierzytelnione żądania kierowane do chronionych punktów końcowych na stronę błędu 401.
src/main/resources/authentication.properties Microsoft Entra ID i konfiguracja programu.
src/main/webapp/ Ten katalog zawiera szablony interfejsu użytkownika — JSP
CHANGELOG.md Lista zmian w przykładzie.
CONTRIBUTING.md Wskazówki dotyczące wnoszenia wkładu do przykładu.
LICENCJA Licencja przykładu.

Przetwarzanie oświadczeń grup w tokenach, w tym obsługa nadwyżki

W poniższych sekcjach opisano sposób przetwarzania oświadczenia grup przez aplikację.

Oświadczenie grup

Identyfikator obiektu grup zabezpieczeń, których członkiem jest zalogowany użytkownik, jest zwracany w roszczeniu groups tokenu, jak pokazano w poniższym przykładzie:

{
  ...
  "groups": [
    "0bbe91cc-b69e-414d-85a6-a043d6752215",
    "48931dac-3736-45e7-83e8-015e6dfd6f7c",]
  ...
}

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 i 6 dla aplikacji jednostronicowych. Jeśli użytkownik należy do większej liczby grup niż wynosi limit przekroczenia, platforma tożsamości Microsoft nie uwzględnia identyfikatorów grup w oświadczeniu „groups” w tokenie. Zamiast tego zawiera w tokenie roszczenie nadmiarowe, które wskazuje aplikacji, aby wysłała zapytanie do interfejsu Microsoft interfejs Graph API w celu pobrania informacji o członkostwie użytkownika w grupach, jak pokazano w poniższym przykładzie:

{
  ...
  "_claim_names": {
    "groups": "src1"
    },
    {
   "_claim_sources": {
    "src1": {
        "endpoint":"[Graph Url to get this user's group membership from]"
        }
    }
  ...
}

Utwórz w tym przykładzie scenariusz przekroczenia limitu do testów

Aby utworzyć scenariusz nadwyżki, możesz wykonać następujące kroki:

  1. 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ć użytkownika podany w skrypcie BulkCreateGroups.ps1.

  2. Po uruchomieniu tego przykładu i wystąpieniu nadwyżki zobaczysz _claim_names na stronie głównej po zalogowaniu użytkownika.

  3. 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 tak, aby odbierała wartości oświadczenia grup z filtrowanego zestawu grup, do których może być przypisany użytkownik.

  4. Jeśli nie możesz uniknąć przekroczenia limitu grup, zalecamy wykonanie następujących kroków, aby przetworzyć claim „groups” w tokenie:

    1. Sprawdź roszczenie _claim_names, gdzie jedną z wartości jest grupy. To zgłoszenie wskazuje na przekroczenie.
    2. Jeśli zostanie znaleziona, wykonaj wywołanie punktu końcowego określonego w _claim_sources w celu pobrania grup użytkowników.
    3. Jeśli nie zostanie znalezione żadne, sprawdź atrybut groups dla grup użytkownika.

Uwaga

Obsługa przekroczenia limitu wymaga wywołania do Microsoft Graph w celu odczytania przynależności zalogowanego użytkownika do grup, więc aplikacja musi mieć uprawnienie GroupMember.Read.All, aby funkcja getMemberObjects mogła zostać pomyślnie wykonana.

Aby uzyskać więcej informacji na temat programowania dla programu Microsoft Graph, zobacz wideo Wprowadzenie do programu Microsoft Graph dla deweloperów.

ConfidentialClientApplication

Instancja jest tworzona w pliku AuthHelper.java, jak pokazano w poniższym przykładzie. Ten obiekt pomaga utworzyć adres URL autoryzacji Microsoft Entra, a także wymienić token uwierzytelniający na token dostępu.

// getConfidentialClientInstance method
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
                      .builder(CLIENT_ID, secret)
                      .authority(AUTHORITY)
                      .build();

Następujące parametry są używane do tworzenia instancji:

  • Identyfikator klienta aplikacji.
  • Klucz tajny klienta, który jest wymagany w przypadku poufnych aplikacji klienckich.
  • Urząd Microsoft Entra ID, który zawiera identyfikator dzierżawy firmy Microsoft Entra.

W tym przykładzie wartości te są odczytywane z pliku authentication.properties przy użyciu czytnika właściwości w pliku Config.java.

Przewodnik krok po kroku

Poniższe kroki zawierają przewodnik po funkcjonalności aplikacji:

  1. Pierwszym krokiem procesu logowania jest wysłanie żądania do punktu końcowego w dzierżawie Microsoft Entra ID. Instancja MSAL4J służy do tworzenia adresu URL żądania autoryzacji. Aplikacja przekierowuje przeglądarkę do tego adresu URL, w którym loguje się użytkownik.

    final ConfidentialClientApplication client = getConfidentialClientInstance();
    AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters.builder(Config.REDIRECT_URI, Collections.singleton(Config.SCOPES))
            .responseMode(ResponseMode.QUERY).prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build();
    
    final String authorizeUrl = client.getAuthorizationRequestUrl(parameters).toString();
    contextAdapter.redirectUser(authorizeUrl);
    

    Poniższa lista zawiera opis funkcji tego kodu:

    • : Parametry, które należy ustawić, aby utworzyć obiekt AuthorizationRequestUrl.
    • : Miejsce, do którego Microsoft Entra przekierowuje przeglądarkę — wraz z kodem autoryzacyjnym — po zebraniu danych logowania użytkownika. Musi być zgodny z adresem URI przekierowania w rejestracji aplikacji Microsoft Entra ID w portalu Azure.
    • : Zakresy są uprawnieniami żądanymi przez aplikację.
      • Zwykle trzy zakresy wystarczą do otrzymania odpowiedzi zawierającej token identyfikacyjny.
      • Pełną listę zakresów żądanych przez aplikację można znaleźć w pliku authentication.properties . Możesz dodać więcej zakresów, takich jak .
  2. Użytkownikowi jest wyświetlany monit logowania przez Microsoft Entra ID. Jeśli próba logowania zakończy się pomyślnie, przeglądarka użytkownika zostanie przekierowana do punktu końcowego przekierowania aplikacji. Prawidłowe żądanie do tego punktu końcowego zawiera kod autoryzacyjny.

  3. Instancja następnie wymienia ten kod autoryzacyjny na token identyfikacyjny i token dostępu z usługi Microsoft Entra ID.

    // First, validate the state, then parse any error codes in response, then extract the authCode. Then:
    // build the auth code params:
    final AuthorizationCodeParameters authParams = AuthorizationCodeParameters
            .builder(authCode, new URI(Config.REDIRECT_URI)).scopes(Collections.singleton(Config.SCOPES)).build();
    
    // Get a client instance and leverage it to acquire the token:
    final ConfidentialClientApplication client = AuthHelper.getConfidentialClientInstance();
    final IAuthenticationResult result = client.acquireToken(authParams).get();
    

    Poniższa lista zawiera opis funkcji tego kodu:

    • : Parametry, które muszą zostać ustawione, aby wymienić kod autoryzacyjny na token identyfikacyjny i/lub token dostępu.
    • : Kod autoryzacji otrzymany w punkcie końcowym przekierowania.
    • : URI przekierowania użyty w poprzednim kroku należy ponownie przekazać.
    • : Zakresy użyte w poprzednim kroku należy ponownie przekazać.
  4. Jeśli zakończy się pomyślnie, oświadczenia tokenu zostaną wyodrębnione. Jeśli weryfikacja nonce powiedzie się, wyniki są umieszczane w — instancji — i zapisywane w sesji. Aplikacja może następnie utworzyć instancję elementu z sesji za pośrednictwem instancji zawsze, gdy potrzebuje do niego dostępu, jak pokazano w poniższym kodzie:

    // parse IdToken claims from the IAuthenticationResult:
    // (the next step - validateNonce - requires parsed claims)
    context.setIdTokenClaims(result.idToken());
    
    // if nonce is invalid, stop immediately! this could be a token replay!
    // if validation fails, throws exception and cancels auth:
    validateNonce(context);
    
    // set user to authenticated:
    context.setAuthResult(result, client.tokenCache().serialize());
    
    // handle groups overage if it has occurred.
    handleGroupsOverage(contextAdapter);
    
  5. Po wykonaniu poprzedniego kroku możesz pobrać informacje o przynależności do grup, wywołując przy użyciu instancji .

  6. Jeśli użytkownik jest członkiem zbyt wielu grup — więcej niż 200 — wywołanie może być puste, gdyby nie wywołanie . Tymczasem zwraca , sygnalizując, że doszło do przekroczenia limitu i że pobranie pełnej listy grup wymaga wywołania interfejsu Microsoft Graph. Zobacz metodę w AuthHelper.java, aby dowiedzieć się, jak ta aplikacja używa w przypadku nadmiaru.

Ochrona tras

Zobacz AuthenticationFilter.java , aby zobaczyć, jak przykładowa aplikacja filtruje dostęp do tras. W pliku authentication.properties właściwość zawiera rozdzielone przecinkami ścieżki, do których dostęp mają tylko uwierzytelnieni użytkownicy, jak pokazano w poniższym przykładzie:

# for example, /token_details requires any user to be signed in and does not require special groups claim
app.protect.authenticated=/token_details

Dowolna z tras wymienionych w zestawach reguł rozdzielonych przecinkami pod elementem jest również niedostępna dla niewierzytelnionych użytkowników, jak pokazano w poniższym przykładzie. Jednak te trasy zawierają również rozdzielaną spacjami listę członkostwa w grupach. Tylko użytkownicy należący do co najmniej jednej z odpowiednich grup mogą uzyskiwać dostęp do tych tras po uwierzytelnieniu.

# define short names for group IDs here for the app. This is useful in the next property (app.protect.groups).
# EXCLUDE the curly braces, they are in this file only as delimiters.
# example:
# app.groups=groupA abcdef-qrstuvw-xyz groupB abcdef-qrstuv-wxyz
app.groups=admin {enter-your-admins-group-id-here}, user {enter-your-users-group-id-here}

# A route and its corresponding group(s) that can view it, <space-separated>; the start of the next route & its group(s) is delimited by a <comma-and-space-separator>
# this says: /admins_only can be accessed by admin group, /regular_user can be accessed by admin group and user group
app.protect.groups=/admin_only admin, /regular_user admin user

Zakresy

Zakresy określają poziom dostępu, o który żąda aplikacja Microsoft Entra ID.

Na podstawie żądanych zakresów identyfikator Entra firmy Microsoft przedstawia użytkownikowi okno dialogowe zgody po zalogowaniu. Jeśli użytkownik wyrazi zgodę na co najmniej jeden zakres i uzyska token, zakresy, na które wyrażono zgodę, zostaną zakodowane w wynikowym .

Zakresy żądane przez aplikację znajdują się w pliku authentication.properties. Domyślnie aplikacja ustawia wartość parametru scopes na . Ten konkretny zakres interfejsu API programu Microsoft Graph jest wymagany w przypadku, gdy aplikacja musi wywołać program Graph w celu uzyskania członkostwa w grupach użytkownika.

Więcej informacji

  • Biblioteka Microsoft Authentication Library (MSAL) dla języka Java
  • Platforma tożsamości Microsoft (Microsoft Entra ID dla programistów)
  • Szybki start: Rejestrowanie aplikacji w platformie tożsamości firmy Microsoft
  • Opis procesu wyrażania zgody na aplikację Microsoft Entra ID
  • Zrozum zgodę użytkownika i administratora
  • Przykłady kodu MSAL

Następny krok

Wdrażanie aplikacji Java WebSphere w tradycyjnym środowisku WebSphere na maszynach wirtualnych platformy Azure