Włączanie aplikacji Java WebLogic w celu logowania użytkowników i uzyskiwania dostępu do programu Microsoft Graph

W tym artykule pokazano aplikację Java WebLogic, która umożliwia użytkownikom logowanie i uzyskuje token dostępu do wywoływania interfejsu API Microsoft Graph. Korzysta z biblioteki Microsoft Authentication Library (MSAL) for Java.

Na poniższym diagramie przedstawiono topologię aplikacji:

Diagram przedstawiający topologię aplikacji.

Aplikacja kliencka używa biblioteki MSAL dla języka Java (MSAL4J) do zalogowania użytkownika i uzyskania tokenu dostępu dla Microsoft Graph z usługi Microsoft Entra ID. Token dostępu potwierdza, że użytkownik jest upoważniony do uzyskania dostępu do punktu końcowego interfejsu API Microsoft Graph zgodnie z definicją w zakresie uprawnień.

Wymagania wstępne

  • Środowisko Java 8 lub nowsze
  • 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łasnej dzierżawie Microsoft Entra ID, jeśli chcesz pracować tylko z kontami w katalogu organizacji — czyli w trybie pojedynczej dzierżawy. Jeśli nie utworzyłeś jeszcze konta użytkownika w swojej dzierżawie, powinieneś to zrobić, zanim przejdziesz dalej. Więcej informacji można znaleźć w artykule Jak tworzyć, zapraszać i usuwać użytkowników.
  • Konto użytkownika w dzierżawie Microsoft Entra ID dowolnej organizacji, jeśli chcesz pracować z kontami w katalogu należącym do dowolnej organizacji — czyli w trybie wielodostawnym. Ten przykład należy zmodyfikować w celu pracy z osobistym kontem Microsoft. Jeśli nie utworzyłeś jeszcze konta użytkownika w swojej dzierżawie, powinieneś to zrobić, zanim przejdziesz dalej. Więcej informacji można znaleźć w artykule Jak tworzyć, zapraszać i usuwać użytkowników.
  • Osobiste konto Microsoft — na przykład Xbox, Hotmail, Live itd. — jeśli chcesz pracować z osobistymi kontami Microsoft.
  • WebLogic
  • 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/2-Authorization-I/call-graph

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.

Rejestrowanie aplikacji (java-servlet-webapp-call-graph)

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ź opisową nazwę aplikacji, która będzie wyświetlana użytkownikom aplikacji — na przykład .

    • W obszarze Obsługiwane typy kont wybierz jedną z następujących opcji:

      • Wybierz Konta tylko w tym katalogu organizacyjnym, jeśli tworzysz aplikację przeznaczoną do użytku wyłącznie przez użytkowników w Twojej dzierżawie — czyli aplikację z jedną dzierżawą.
      • Wybierz pozycję Konta w dowolnym katalogu organizacyjnym, jeśli chcesz, aby użytkownicy w dowolnej dzierżawie Microsoft Entra ID mogli korzystać z Twojej aplikacji — czyli aplikacji wielodostępnej.
      • Wybierz opcję Konta w dowolnym katalogu organizacyjnym i osobiste konta Microsoft, aby objąć jak najszerszą grupę klientów — to znaczy aplikację wielodostępną, która obsługuje również osobiste konta Microsoft.
    • Wybierz pozycję Osobiste konta Microsoft do użycia tylko przez użytkowników osobistych kont Microsoft — na przykład konta Hotmail, Live, Skype i Xbox.

    • W sekcji Identyfikator URI przekierowania wybierz w polu kombi pozycję Web 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 uprawnienia.

  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 pozycję User.Read z listy. W razie potrzeby użyj pola wyszukiwania.

  18. Wybierz Dodaj uprawnienia.


Skonfiguruj aplikację (java-servlet-webapp-call-graph) 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ść jedną z następujących wartości:

    • Identyfikator dzierżawy Microsoft Entra ID, jeśli aplikacja została zarejestrowana przy użyciu opcji Konta tylko w tym katalogu organizacyjnym.
    • Słowo , jeśli zarejestrowano aplikację przy użyciu opcji Konta w dowolnym katalogu organizacyjnym.
    • Słowo , jeśli aplikacja została zarejestrowana z opcją Konta w dowolnym katalogu organizacyjnym i osobiste konta Microsoft.
    • Słowo , jeśli zarejestrowano aplikację za pomocą opcji Osobiste konta Microsoft.
  4. Znajdź ciąg 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.

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.

Wdrażanie przykładu

W tych instrukcjach przyjęto założenie, że zainstalowano środowisko WebLogic i skonfigurowano pewną domenę serwera.

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

  1. W przykładzie znajdź plik application.properties lub authentication.properties, w którym skonfigurowano identyfikator klienta, dzierżawcę, adres URL przekierowania itd.

  2. W tym pliku zmień odwołania do lub na adres URL i port, na których działa WebLogic, które domyślnie powinny mieć wartość .

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

Wykonaj następujące kroki, aby wdrożyć przykład w aplikacji WebLogic za pośrednictwem konsoli sieci Web:

  1. Uruchom serwer WebLogic przy użyciu polecenia DOMAIN_NAME\bin\startWebLogic.cmd.

  2. W przeglądarce przejdź do konsoli internetowej WebLogic pod adresem .

  3. Przejdź do Struktura domenyWdrożenia, wybierz Zainstaluj, wybierz Prześlij swoje pliki, a następnie znajdź plik .war, który został utworzony przy użyciu narzędzia Maven.

  4. Wybierz pozycję Zainstaluj to wdrożenie jako aplikację, wybierz pozycję Dalej, wybierz pozycję Zakończ, a następnie wybierz pozycję Zapisz.

  5. Większość ustawień domyślnych powinna być odpowiednia, z wyjątkiem tego, że należy nadać aplikacji nazwę zgodną z identyfikatorem URI przekierowania ustawionym w przykładowej konfiguracji lub w rejestracji aplikacji w usłudze Azure. To znaczy, jeśli identyfikator URI przekierowania to , powinieneś nazwać aplikację .

  6. Wróć do Struktura domenyWdrożenia i uruchom aplikację.

  7. Po uruchomieniu aplikacji przejdź do , a następnie powinieneś mieć dostęp do aplikacji.

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 Wywołaj Graph, aby wywołać punkt końcowy /me usługi Microsoft Graph i zobaczyć wybrane szczegóły użytkownika.
  8. Użyj przycisku w rogu, aby się wylogować.

Informacje o kodzie

W tym przykładzie użyto biblioteki MSAL dla języka Java (MSAL4J) w celu zalogowania użytkownika i uzyskania tokenu dla interfejsu API programu Microsoft Graph. Używa Microsoft Graph SDK for Java do pobierania danych z usługi Graph. Te biblioteki należy dodać do projektów przy użyciu narzędzia Maven.

Jeśli chcesz odtworzyć działanie tego przykładu, możesz skopiować plik pom.xml oraz zawartość folderów helpers i authservlets znajdujących się w folderze 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/callgraphwebapp/ 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.

ConfidentialClientApplication

Instancja jest tworzona w pliku AuthHelper.java, jak pokazano w poniższym przykładzie. Ten obiekt pomaga tworzyć adres URL autoryzacji Microsoft Entra ID, 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 muszą zostać ustawione, aby zbudować element .
    • : Miejsce, do którego Microsoft Entra ID przekierowuje przeglądarkę — wraz z kodem autoryzacyjnym — po zebraniu poświadczeń 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());
    

Ochrona tras

Aby uzyskać informacje na temat sposobu filtrowania dostępu do tras przez przykładową aplikację, zobacz AuthenticationFilter.java. 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 roles or groups claim(s)
app.protect.authenticated=/token_details, /call_graph

Graf wywołań

Gdy użytkownik przejdzie do , aplikacja tworzy wystąpienie obiektu z zestawu Java Graph SDK, przekazując token dostępu zalogowanego użytkownika. Klient Graph umieszcza token dostępu w nagłówkach swoich żądań. Następnie aplikacja prosi klienta Graph o wywołanie punktu końcowego w celu uzyskania szczegółowych informacji o obecnie zalogowanym użytkowniku.

Jeśli masz już prawidłowy token dostępu do usługi Graph z zakresem , potrzebujesz tylko poniższego kodu, aby uzyskać dostęp do punktu końcowego :

//CallGraphServlet.java
User user = GraphHelper.getGraphClient(contextAdapter).me().buildRequest().get();

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 służy do uzyskiwania dostępu do informacji bieżącego zalogowanego użytkownika. Punkt końcowy interfejsu Graph służący do uzyskiwania dostępu do tych informacji to . Wszystkie prawidłowe żądania wysyłane do tego punktu końcowego muszą zawierać element , który zawiera zakres w nagłówku .

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 WebLogic na serwerze WebLogic na maszynach wirtualnych Azure