Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule przedstawiono aplikację serwletu Java, która uwierzytelnia użytkowników za pomocą usługi Azure Active Directory B2C (Azure AD B2C) przy użyciu biblioteki Microsoft Authentication Library for Java (MSAL4J).
Uwaga
Od 1 maja 2025 r. Azure Active Directory B2C nie jest już dostępna do zakupu dla nowych klientów. Istniejący klienci mogą nadal korzystać z usługi Azure AD B2C z obsługą techniczną do co najmniej maja 2030 r. W przypadku nowych projektów zarządzania tożsamościami klientów i dostępem (CIAM) użyj Tożsamość zewnętrzna Microsoft Entra zamiast tego.
Na poniższym diagramie przedstawiono topologię aplikacji:
Diagram przedstawiający topologię aplikacji.
Aplikacja używa biblioteki MSAL4J do logowania użytkowników i uzyskiwania tokenu identyfikatora z usługi Azure AD B2C. Token ID potwierdza, że użytkownik jest uwierzytelniony w dzierżawie Azure AD B2C.
Wymagania wstępne
- JDK w wersji 8 lub nowszej
- Maven 3
- Dzierżawa usługi Azure AD B2C. Aby uzyskać więcej informacji, zobacz Samouczek: tworzenie dzierżawy Azure Active Directory B2C
- Konto użytkownika w dzierżawie usługi Azure AD B2C.
- 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/1-Authentication/sign-in-b2c
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 Azure AD B2C
Przykład zawiera wcześniej zarejestrowaną aplikację na potrzeby testów. Jeśli chcesz korzystać z własnej dzierżawy i aplikacji Azure AD B2C, wykonaj czynności opisane w poniższych sekcjach, aby zarejestrować i skonfigurować aplikację w portalu Azure. W przeciwnym razie przejdź do kroków opisanych w sekcji Uruchamianie przykładu.
Wybierz dzierżawę Azure AD B2C, w której chcesz utworzyć swoje aplikacje
Aby wybrać dzierżawcę, wykonaj następujące kroki:
Zaloguj się do portalu Azure.
Jeśli Twoje konto znajduje się w więcej niż jednej dzierżawie usługi Azure AD B2C, wybierz swój profil w rogu portalu Azure, a następnie wybierz Przełącz katalog, aby przełączyć sesję do żądanej dzierżawy usługi Azure AD B2C.
Utwórz przepływy użytkowników i zasady niestandardowe
Aby utworzyć typowe przepływy użytkownika, takie jak rejestracja, logowanie, edytowanie profilu i resetowanie hasła, zobacz Samouczek: tworzenie przepływów użytkownika w usłudze Azure Active Directory B2C.
Należy również rozważyć utworzenie zasad niestandardowych w usłudze Azure Active Directory B2C, jednak wykracza to poza zakres tego samouczka.
Dodaj zewnętrznych dostawców tożsamości
Zobacz Samouczek: jak dodać dostawców tożsamości do aplikacji w usłudze Azure Active Directory B2C.
Rejestrowanie aplikacji (ms-identity-b2c-java-servlet-webapp-authentication)
Aby zarejestrować aplikację, wykonaj następujące czynności:
Przejdź do witryny Azure portal i wybierz Azure AD B2C.
Wybierz pozycję Rejestracje aplikacji w okienku nawigacji, a następnie wybierz pozycję Nowa rejestracja.
Na wyświetlonej stronie „Rejestrowanie aplikacji” wprowadź następujące informacje dotyczące rejestracji aplikacji:
- W sekcji Nazwa wprowadź znaczącą nazwę aplikacji wyświetlaną użytkownikom aplikacji — na przykład .
- W obszarze Obsługiwane typy kont wybierz pozycję Konta w dowolnym katalogu organizacyjnym i osobiste konta Microsoft (np. Skype, Xbox, Outlook.com).
- W sekcji URI przekierowania (opcjonalnie) wybierz Web w polu kombi i wprowadź następujący identyfikator URI przekierowania: .
Wybierz pozycję Zarejestruj, aby utworzyć aplikację.
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.
Wybierz Zapisz, aby zapisać zmiany.
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.
W sekcji Klucze tajne klienta wybierz pozycję Nowy klucz tajny klienta.
Wpisz opis — na przykład klucz tajny aplikacji.
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.
Wybierz Dodaj. Zostanie wyświetlona wygenerowana wartość.
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.
Skonfiguruj aplikację (ms-identity-b2c-java-servlet-webapp-authentication), aby używała rejestracji Twojej aplikacji
Aby skonfigurować aplikację, wykonaj następujące kroki:
Uwaga
W poniższych krokach oznacza to samo co lub .
Otwórz projekt w środowisku IDE.
Otwórz plik ./src/main/resources/authentication.properties.
Znajdź właściwość i zastąp istniejącą wartość identyfikatorem aplikacji lub aplikacji z witryny Azure Portal.
Znajdź właściwość i zastąp istniejącą wartość wartością zachowaną podczas tworzenia aplikacji w portalu Azure.
Znajdź właściwość i zastąp istniejący clientId aplikacji wartością umieszczoną w w kroku 1 tej sekcji.
Znajdź właściwość
aad.authorityi zastąp pierwsze wystąpieniefabrikamb2cnazwą dzierżawy usługi Azure AD B2C, w której utworzono aplikacjęms-identity-b2c-java-servlet-webapp-authenticationw portalu Azure.Znajdź właściwość i zastąp drugie wystąpienie elementu nazwą dzierżawy Azure AD B2C, w której utworzono aplikację w portalu Azure.
Znajdź właściwość i zastąp ją nazwą zasady przepływu użytkownika rejestracji/logowania utworzonej w dzierżawie Azure AD B2C, w której utworzono aplikację w portalu Azure.
Znajdź właściwość i zastąp ją nazwą zasad przepływu użytkownika resetowania hasła, które zostały utworzone w dzierżawie Azure AD B2C, w której w portalu Azure utworzono aplikację .
Znajdź właściwość i zastąp ją nazwą zasad przepływu użytkownika służących do edycji profilu, utworzonych w dzierżawie usługi Azure AD B2C, w której utworzono aplikację 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.
Uruchamianie aplikacji przykładowej
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:
W przykładzie znajdź plik application.properties lub authentication.properties, w którym skonfigurowano identyfikator klienta, dzierżawcę, adres URL przekierowania itd.
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ść .
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:
Uruchom serwer WebLogic przy użyciu DOMAIN_NAME \bin\startWebLogic.cmd.
W przeglądarce przejdź do konsoli internetowej WebLogic pod adresem .
Przejdź do pozycji Struktura domeny Wdrożenia, wybierz Zainstaluj, wybierz Prześlij swoje pliki, a następnie znajdź plik .war, który został utworzony przy użyciu narzędzia Maven.
Wybierz pozycję Zainstaluj to wdrożenie jako aplikację, wybierz pozycję Dalej, wybierz pozycję Zakończ, a następnie wybierz pozycję Zapisz.
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ę .
Wróć do Struktura domenyWdrożenia i uruchom aplikację.
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:
- Zwróć uwagę na stan logowania lub wylogowania wyświetlany na środku ekranu.
- Wybierz przycisk kontekstowy w rogu. Ten przycisk ma napis Zaloguj się przy pierwszym uruchomieniu aplikacji.
- Na następnej stronie postępuj zgodnie z instrukcjami i zaloguj się przy użyciu konta wybranego dostawcy tożsamości.
- Zwróć uwagę, że przycisk kontekstowy zawiera teraz pozycję Wyloguj się i wyświetla swoją nazwę użytkownika.
- Wybierz pozycję Szczegóły tokenu identyfikatora, aby zobaczyć niektóre zdekodowane oświadczenia tokenu identyfikatora.
- Istnieje również możliwość edytowania profilu. Wybierz link, aby edytować szczegóły, takie jak nazwa wyświetlana, miejsce zamieszkania i zawód.
- Użyj przycisku w rogu, aby się wylogować.
- Po wylogowaniu przejdź do następującego adresu URL strony ze szczegółami tokenu: . Tutaj możesz zobaczyć, jak aplikacja wyświetla błąd zamiast claimów tokenu ID.
Informacje o kodzie
W tym przykładzie pokazano, jak używać biblioteki MSAL4J do logowania użytkowników do dzierżawy usługi Azure AD B2C.
Zawartość
W poniższej tabeli przedstawiono zawartość przykładowego folderu projektu:
| Plik/folder | Opis |
|---|---|
| AuthHelper.java | Funkcje pomocnika na potrzeby uwierzytelniania. |
| Config.java | Uruchamia się przy uruchamianiu i konfiguruje czytnik właściwości i rejestrator. |
| authentication.properties | Microsoft Entra ID i konfiguracja programu. |
| AuthenticationFilter.java | Przekierowuje nieuwierzytelnione żądania do chronionych zasobów na stronie 401. |
| MsalAuthSession | Tworzone przy użyciu elementu . Przechowuje wszystkie atrybuty sesji powiązanej z biblioteką MSAL w atrybucie sesji. |
| *Servlet.java | Wszystkie dostępne punkty końcowe są definiowane w klasach Języka Java z nazwami kończącymi się na Servlet.. |
| 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 ułatwia utworzenie adresu URL autoryzacji usługi Azure AD B2C, a także pomaga w wymianie tokenu uwierzytelniania dla tokenu dostępu.
IClientSecret secret = ClientCredentialFactory.createFromSecret(SECRET);
confClientInstance = ConfidentialClientApplication
.builder(CLIENT_ID, secret)
.b2cAuthority(AUTHORITY + policy)
.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.
- Adres URL urzędu Azure AD B2C połączony z odpowiednim na potrzeby rejestracji, logowania, edycji profilu lub resetowania hasła.
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:
Pierwszym krokiem procesu logowania jest wysłanie żądania do punktu końcowego dla Twojej dzierżawy Azure Active Directory B2C. Instancja MSAL4J służy do utworzenia adresu URL żądania autoryzacji, a aplikacja przekierowuje przeglądarkę na ten adres URL, jak pokazano w poniższym przykładzie:
final ConfidentialClientApplication client = getConfidentialClientInstance(policy); final AuthorizationRequestUrlParameters parameters = AuthorizationRequestUrlParameters .builder(REDIRECT_URI, Collections.singleton(SCOPES)).responseMode(ResponseMode.QUERY) .prompt(Prompt.SELECT_ACCOUNT).state(state).nonce(nonce).build(); final String redirectUrl = client.getAuthorizationRequestUrl(parameters).toString(); Config.logger.log(Level.INFO, "Redirecting user to {0}", redirectUrl); resp.setStatus(302); resp.sendRedirect(redirectUrl);Poniższa lista zawiera opis funkcji tego kodu:
: Parametry, które należy ustawić, aby utworzyć obiekt AuthorizationRequestUrl.
: miejsce, do którego usługa Azure AD B2C przekierowuje przeglądarkę — wraz z kodem autoryzacyjnym — po zebraniu danych logowania użytkownika.
: Zakresy to uprawnienia żądane przez aplikację.
Zwykle trzy zakresy wystarczyłyby, aby otrzymać odpowiedź zawierającą token identyfikacyjny. Jednak biblioteka MSAL4J wymaga, aby wszystkie odpowiedzi z usługi Azure AD B2C zawierały również token dostępu.
Aby usługa Azure AD B2C zrezygnowała z tokenu dostępu, a także tokenu identyfikatora, żądanie musi zawierać dodatkowy zakres zasobów. Ponieważ ta aplikacja w rzeczywistości nie wymaga zewnętrznego zakresu zasobów, dodaje własny identyfikator klienta jako czwarty zakres w celu otrzymania tokenu dostępu.
Pełną listę zakresów żądanych przez aplikację można znaleźć w pliku authentication.properties .
: Usługa Azure AD B2C może zwrócić odpowiedź jako parametry formularza w żądaniu HTTP POST lub jako parametry ciągu zapytania w żądaniu HTTP GET.
: Usługa Azure AD B2C powinna poprosić użytkownika o wybranie konta, za pomocą którego chce się uwierzytelnić.
: Unikatowa zmienna ustawiana przez aplikację w sesji przy każdym żądaniu tokenu i usuwana po otrzymaniu odpowiedniego zwrotnego wywołania przekierowania z usługi Azure AD B2C. Zmienna stanu zapewnia, że żądania usługi Azure AD B2C do elementu rzeczywiście pochodzą z żądań autoryzacji usługi Azure AD B2C zainicjowanych przez tę aplikację i w ramach tej sesji, zapobiegając tym samym atakom CSRF. Odbywa się to w pliku AADRedirectServlet.java .
: unikatowa zmienna ustawiana przez aplikację w sesji przy każdym żądaniu tokenu i usuwana po otrzymaniu odpowiadającego mu tokenu. Ta wartość nonce jest przenoszona do wynikowych tokenów wydawanych przez usługę Azure AD B2C, co zapewnia, że nie dochodzi do ataku powtórzeniowego tokenu.
Usługa Azure Active Directory B2C wyświetla użytkownikowi monit logowania. 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 wysłane do tego punktu końcowego zawiera kod autoryzacji.
Następnie instancja wymienia ten kod autoryzacji na token ID i token dostępu z usługi Azure Active Directory B2C, jak pokazano w poniższym przykładzie:
final AuthorizationCodeParameters authParams = AuthorizationCodeParameters .builder(authCode, new URI(REDIRECT_URI)) .scopes(Collections.singleton(SCOPES)).build(); final ConfidentialClientApplication client = AuthHelper .getConfidentialClientInstance(policy); final Future<IAuthenticationResult> future = client.acquireToken(authParams); final IAuthenticationResult result = future.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ć.
Jeśli zakończy się powodzeniem, oświadczenia zawarte w tokenie zostaną wyodrębnione, a oświadczenie nonce zostanie zweryfikowane względem wartości nonce przechowywanej w sesji, jak pokazano w poniższym przykładzie:
parseJWTClaimsSetAndStoreResultInSession(msalAuth, result, serializedTokenCache); validateNonce(msalAuth) processSuccessfulAuthentication(msalAuth);Jeśli nonce zostanie pomyślnie zweryfikowany, stan uwierzytelnienia jest zapisywany w sesji po stronie serwera z wykorzystaniem metod udostępnianych przez klasę , jak pokazano w poniższym przykładzie:
msalAuth.setAuthenticated(true); msalAuth.setUsername(msalAuth.getIdTokenClaims().get("name"));
Więcej informacji
- Co to jest usługa Azure Active Directory B2C?
- Typy aplikacji, które można używać w usłudze Active Directory B2C
- Zalecenia i najlepsze rozwiązania dotyczące usługi Azure Active Directory B2C
- Sesja usługi Azure AD B2C
- Biblioteka Microsoft Authentication Library (MSAL) dla języka Java
Aby uzyskać więcej informacji o tym, jak działają protokoły OAuth 2.0 w tym scenariuszu i innych scenariuszach, zobacz Scenariusze uwierzytelniania dla Microsoft Entra ID.
Następny krok
Wdrażanie aplikacji Java WebLogic na serwerze WebLogic na maszynach wirtualnych Azure