Samouczek: uwierzytelnianie klienta za pomocą usługi Spring Cloud Gateway w usłudze Azure Spring Apps
Uwaga
Plany Podstawowa, Standardowa i Enterprise zostaną wycofane od połowy marca 2025 r. z 3-letnim okresem emerytalnym. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz ogłoszenie o wycofaniu usługi Azure Spring Apps.
Zużycie standardowe i dedykowany plan zostaną wycofane od 30 września 2024 r. z całkowitym zamknięciem po sześciu miesiącach. Zalecamy przejście do usługi Azure Container Apps. Aby uzyskać więcej informacji, zobacz Migrowanie użycia usługi Azure Spring Apps w warstwie Standardowa i dedykowanego planu do usługi Azure Container Apps.
Ten artykuł dotyczy: ✔️ użycie standardowe i dedykowane (wersja zapoznawcza)
W tym przewodniku Szybki start pokazano, jak zabezpieczyć komunikację między aplikacją kliencką a aplikacją mikrousług hostowaną w usłudze Azure Spring Apps i chronioną aplikacją Spring Cloud Gateway. Aplikacja kliencka jest weryfikowana jako podmiot zabezpieczeń w celu zainicjowania kontaktu z mikrousługą wdrożona w usłudze Azure Spring Apps przy użyciu aplikacji utworzonej za pomocą usługi Spring Cloud Gateway. Ta metoda wykorzystuje funkcje przekaźnika tokenów usługi Spring Cloud Gateway i serwera zasobów Spring Security na potrzeby procesów uwierzytelniania i autoryzacji, realizowane przez wykonanie przepływu poświadczeń klienta OAuth 2.0.
Na poniższej liście przedstawiono kompozycję przykładowego projektu:
- Books SPA: Ta aplikacja jednostronicowa (SPA), hostowana lokalnie, wchodzi w interakcję z mikrousługą Books do dodawania lub wyszukiwania książek.
- Mikrousługi książek:
- Aplikacja Spring Cloud Gateway hostowana w usłudze Azure Spring Apps. Ta aplikacja działa jako brama do interfejsów API RESTful książek.
- Aplikacja interfejsu API RESTful platformy Spring Boot hostowana w usłudze Azure Spring Apps. Ta aplikacja przechowuje informacje o książce w bazie danych H2. Usługa Books udostępnia dwa punkty końcowe REST do pisania i odczytywania książek.
1. Wymagania wstępne
- Subskrypcja Azure. Jeśli nie masz subskrypcji, przed rozpoczęciem utwórz bezpłatne konto .
- Git.
- Java Development Kit (JDK), wersja 17.
- Dzierżawa firmy Microsoft Entra. Aby uzyskać więcej informacji na temat tworzenia dzierżawy usługi Microsoft Entra, zobacz Szybki start: tworzenie nowej dzierżawy w usłudze Microsoft Entra ID.
- Interfejs wiersza polecenia platformy Azure w wersji 2.45.0 lub nowszej.
- Zainstalowanie środowiska Node.js.
2. Przygotowanie projektu Spring
Aby sklonować i uruchomić aplikację lokalnie, wykonaj następujące kroki:
Użyj następującego polecenia, aby sklonować przykładowy projekt z usługi GitHub:
git clone https://github.com/Azure-Samples/azure-spring-apps-sso-client-credential.git -b consumption-plan
Użyj następującego polecenia, aby skompilować usługi zaplecza Książki:
cd azure-spring-apps-sso-client-credential ./mvnw clean package
Wprowadź katalog projektu SPA i użyj następującego polecenia, aby zainstalować zależności:
npm install @azure/msal-node
3. Przygotowanie środowiska chmury
Główne zasoby wymagane do uruchomienia tego przykładu to wystąpienie usługi Azure Spring Apps i wystąpienie usługi Azure Database for PostgreSQL. Ta sekcja zawiera kroki tworzenia tych zasobów.
3.1. Zaloguj się do witryny Azure Portal.
Otwórz przeglądarkę internetową i przejdź do witryny Azure Portal. Wprowadź swoje poświadczenia, aby zalogować się do witryny Azure Portal. Widok domyślny to pulpit nawigacyjny usług.
3.2. Tworzenie wystąpienia usługi Azure Spring Apps
Aby utworzyć wystąpienie usługi, wykonaj następujące czynności:
Wybierz pozycję Utwórz zasób w rogu witryny Azure Portal.
Wybierz pozycję Compute>Azure Spring Apps.
Wypełnij formularz Podstawowe, korzystając z następujących informacji:
Ustawienie Sugerowana wartość opis Subskrypcja Nazwa subskrypcji Subskrypcja platformy Azure, która ma być używana dla serwera. Jeśli masz wiele subskrypcji, wybierz subskrypcję, w której chcesz naliczać opłaty za zasób. Grupa zasobów myresourcegroup Nowa nazwa grupy zasobów lub istniejąca nazwa z subskrypcji. Nazwisko myasa Unikatowa nazwa identyfikująca usługę Azure Spring Apps. Nazwa musi mieć długość od 4 do 32 znaków i może zawierać tylko małe litery, cyfry i łączniki. Pierwszy znak nazwy usługi musi być literą, a ostatni znak musi być literą lub cyfrą. Planowanie Użycie standardowe i dedykowane (wersja zapoznawcza) Plan cenowy określa zasoby i koszty skojarzone z wystąpieniem. Region (Region) Region najbliżej Twoich użytkowników Lokalizacja znajdująca się najbliżej użytkowników. Środowisko usługi Container Apps myacaenv Wybierz wystąpienie środowiska usługi Container Apps, które ma współużytkować tę samą sieć wirtualną z innymi usługami i zasobami. Skorzystaj z poniższej tabeli jako przewodnika, aby utworzyć środowisko Container Apps Environment:
Ustawienie Sugerowana wartość opis Nazwa środowiska myacaenv Unikatowa nazwa identyfikująca usługę Azure Container Apps Environment. Planowanie Zużycie Plan cenowy określa zasoby i koszty skojarzone z wystąpieniem. Strefowo nadmiarowy Disabled Czy utworzyć usługę Środowiska usługi Container Apps w strefie dostępności platformy Azure. Ważne
Profil obciążenia Zużycie ma model rozliczeniowy z płatnością zgodnie z rzeczywistym użyciem bez kosztów początkowych. Opłaty są naliczane za dedykowany profil obciążenia na podstawie zaaprowizowanych zasobów. Aby uzyskać więcej informacji, zobacz Profile obciążeń w środowiskach Struktury użycia i dedykowanego planu w usłudze Azure Container Apps (wersja zapoznawcza) i Cennik usługi Azure Spring Apps.
Wybierz pozycję Przejrzyj i Utwórz , aby przejrzeć wybrane opcje. Wybierz pozycję Utwórz , aby aprowizować wystąpienie usługi Azure Spring Apps.
Na pasku narzędzi wybierz ikonę Powiadomienia (dzwonek), aby monitorować proces wdrażania. Po zakończeniu wdrażania możesz wybrać pozycję Przypnij do pulpitu nawigacyjnego, co spowoduje utworzenie kafelka dla tej usługi na pulpicie nawigacyjnym witryny Azure Portal jako skrótu do strony Przegląd usługi. Wybierz pozycję Przejdź do zasobu, aby otworzyć stronę Przegląd usługi.
Użyj następującego polecenia, aby włączyć serwer Eureka. Pamiętaj, aby zastąpić symbole zastępcze własnymi wartościami utworzonymi w poprzednim kroku.
az spring eureka-server enable \ --resource-group <resource-group-name> \ --name <Azure-Spring-Apps-instance-name>
3.3. Rejestrowanie aplikacji Książki
Ta sekcja zawiera kroki rejestrowania aplikacji w celu dodania ról aplikacji w identyfikatorze Entra firmy Microsoft, który jest używany do ochrony interfejsów API RESTful w usłudze Azure Spring Apps.
Przejdź do strony głównej witryny Azure Portal.
Jeśli masz dostęp do wielu dzierżaw, użyj filtru Katalog i subskrypcja ( ), aby wybrać dzierżawę, w której chcesz zarejestrować aplikację.
Wyszukaj i wybierz Tożsamość Microsoft Entra.
W obszarze Zarządzanie wybierz pozycję Rejestracje aplikacji> Nowa rejestracja.
Wprowadź nazwę aplikacji w polu Nazwa , na przykład Książki. Użytkownicy aplikacji mogą zobaczyć tę nazwę i możesz ją zmienić później.
W obszarze Obsługiwane typy kont wybierz pozycję Konta tylko w tym katalogu organizacyjnym.
Wybierz pozycję Zarejestruj, aby utworzyć aplikację.
Na stronie Przegląd aplikacji wyszukaj wartość Identyfikator aplikacji (klienta), a następnie zapisz ją do późniejszego użycia. Potrzebny jest go do skonfigurowania pliku konfiguracji YAML dla tego projektu.
W obszarze Zarządzanie wybierz pozycję Uwidaczniaj interfejs API, znajdź identyfikator URI identyfikatora aplikacji na początku strony, a następnie wybierz pozycję Dodaj.
Na stronie Edytowanie identyfikatora URI identyfikatora aplikacji zaakceptuj proponowany identyfikator URI identyfikatora aplikacji (
api://{client ID}
) lub użyj znaczącej nazwy zamiast identyfikatora klienta, takiego jakapi://books
, a następnie wybierz pozycję Zapisz.W obszarze Zarządzanie wybierz pozycję Role>aplikacji Utwórz rolę aplikacji, a następnie wprowadź następujące informacje:
- W polu Nazwa wyświetlana wprowadź ciąg Zapis.
- W obszarze Dozwolone typy elementów członkowskich wybierz pozycję Aplikacje.
- W polu Wartość wprowadź ciąg Books.Write.
- W polu Opis wprowadź ciąg Dodawanie książek.
Powtórz poprzedni krok, aby dodać inną rolę aplikacji:
Books.Read
.
3.4. Rejestrowanie aplikacji SPA
Aplikacja interfejsu API RESTful books działa jako serwer zasobów, który jest chroniony przez identyfikator Entra firmy Microsoft. Przed uzyskaniem tokenu dostępu musisz zarejestrować inną aplikację w identyfikatorze Entra firmy Microsoft i udzielić uprawnień aplikacji klienckiej o nazwie SPA
.
Wróć do dzierżawy w usłudze Microsoft Entra ID.
W obszarze Zarządzanie wybierz pozycję Rejestracje aplikacji> Nowa rejestracja.
Wprowadź nazwę aplikacji w polu Nazwa , na przykład
SPA
.W przypadku obsługiwanych typów kont użyj tylko domyślnych kont w tym katalogu organizacyjnym.
Wybierz pozycję Zarejestruj, aby utworzyć aplikację.
Na stronie Przegląd aplikacji wyszukaj wartość Identyfikator aplikacji (klienta), a następnie zapisz ją do późniejszego użycia. Potrzebujesz go do uzyskania tokenu dostępu.
Wybierz pozycję Uprawnienia>interfejsu API Dodaj interfejsy API uprawnień>używane przez moją organizację. Wybierz zarejestrowaną wcześniej aplikację
Books
, wybierz uprawnienia Books.Read and Books.Write, a następnie wybierz pozycję Dodaj uprawnienia.Wybierz pozycję Udziel zgody administratora dla <nazwy> dzierżawy, aby udzielić zgody administratora dla dodanych uprawnień.
Przejdź do pozycji Certyfikaty i wpisy tajne , a następnie wybierz pozycję Nowy klucz tajny klienta.
Na stronie Dodawanie wpisu tajnego klienta wprowadź opis wpisu tajnego, wybierz datę wygaśnięcia, a następnie wybierz pozycję Dodaj.
Wyszukaj wartość wpisu tajnego, a następnie zapisz go do późniejszego użycia. Potrzebujesz go, aby uzyskać token dostępu.
3.5. Aktualizowanie konfiguracji aplikacji Books Service
Znajdź plik books-service/src/main/resources/application.yml aplikacji books-service
. Zaktualizuj konfigurację w spring.cloud.azure.active-directory
sekcji, aby odpowiadała poniższemu przykładowi. Pamiętaj, aby zastąpić symbole zastępcze utworzonymi wcześniej wartościami.
spring:
cloud:
azure:
active-directory:
credential:
client-id: <your-application-ID-of-Books>
app-id-uri: <your-application-ID-URI-of-Books>
Użyj następującego polecenia, aby ponownie skompilować przykładowy projekt:
./mvnw clean package
4. Wdrażanie aplikacji w usłudze Azure Spring Apps
W poniższych krokach pokazano, jak wdrożyć aplikacje na platformie Azure.
4.1. Wdrażanie aplikacji mikrousług w usłudze Azure Spring Apps
Wykonaj następujące kroki, aby wdrożyć aplikacje w usłudze Azure Spring Apps przy użyciu wtyczki Maven dla usługi Azure Spring Apps:
Przejdź do przykładowego katalogu projektu, a następnie użyj następującego polecenia, aby skonfigurować aplikację w usłudze Azure Spring Apps:
./mvnw com.microsoft.azure:azure-spring-apps-maven-plugin:1.18.0:config
Poniższa lista zawiera opis interakcji poleceń:
- Wybierz moduły podrzędne do skonfigurowania (numery wejściowe oddzielone przecinkami, np. [1–2,4,6], WPROWADŹ, aby wybrać wszystko): Naciśnij Enter , aby wybrać wszystko.
- Logowanie OAuth2: autoryzuj logowanie do platformy Azure na podstawie protokołu OAuth2.
- Wybierz subskrypcję: wybierz numer listy subskrypcji utworzonego wystąpienia usługi Azure Spring Apps, które jest domyślnie ustawione na pierwszą subskrypcję na liście. Jeśli używasz numeru domyślnego, naciśnij Enter bezpośrednio.
- Wybierz pozycję Azure Spring Apps do wdrożenia: wybierz numer listy utworzonego wystąpienia usługi Azure Spring Apps. Jeśli używasz numeru domyślnego, naciśnij Enter bezpośrednio.
- Wybierz aplikacje, aby uwidocznić dostęp publiczny: (numery wejściowe oddzielone przecinkami, np. [1–2,4,6], WPROWADŹ, aby wybrać opcję NONE): Wprowadź 1 dla
gateway-service
. - Potwierdź zapisanie wszystkich powyższych konfiguracji (Y/n): wprowadź y. Jeśli wprowadzisz n, konfiguracja nie zostanie zapisana w plikach POM.
Aby wdrożyć aplikację, użyj następującego polecenia:
./mvnw azure-spring-apps:deploy
Na poniższej liście opisano interakcję z poleceniem:
- Logowanie OAuth2: musisz autoryzować logowanie do platformy Azure na podstawie protokołu OAuth2.
Po wykonaniu polecenia można zobaczyć następujące komunikaty dziennika, które wskazują, że wdrożenie zakończyło się pomyślnie.
[INFO] Getting public url of app(gateway-service)... [INFO] Application url: https://gateway-service.xxxxxxxxxxxxxx-xxxxxxxx.eastasia.azurecontainerapps.io ... [INFO] Artifact(books-service-0.0.1-SNAPSHOT.jar) is uploaded and deployment(default) is successfully updated. ...
Wyjściowy adres URL aplikacji jest podstawowym punktem końcowym umożliwiającym dostęp do aplikacji interfejsu API RESTful do wykonania.
4.2. Uruchamianie aplikacji SPA lokalnie
Zaktualizuj konfigurację w pliku skryptu SPA
aplikacji spa/server.js, aby był zgodny z poniższym przykładem. Pamiętaj, aby zastąpić symbole zastępcze własnymi wartościami utworzonymi w poprzednim kroku.
const SpringCloudGatewayURL = "<URL exposed by app gateway-service>"
const msalConfig = {
auth: {
clientId: "< SPA App Registration ClientId>",
authority: "https://login.microsoftonline.com/< TenantId >/",
clientSecret: "<SPA App Registration ClientSecret>",
},
};
const tokenRequest = {
scopes: ["<Application ID URI of Books>/.default"]
};
W katalogu projektu SPA użyj następującego polecenia, aby uruchomić lokalnie:
node server.js
Uwaga
Aplikacja SPA jest statyczną aplikacją internetową, którą można wdrożyć na dowolnym serwerze internetowym.
5. Weryfikowanie aplikacji
Dostęp do aplikacji Books SPA, która komunikuje się z interfejsami API RESTful Książek za pośrednictwem gateway-service
aplikacji.
Przejdź do
http://localhost:3000
witryny w przeglądarce, aby uzyskać dostęp do aplikacji.Wprowadź wartości dla pola Author (Autor ) i Title (Tytuł), a następnie wybierz pozycję Add Book (Dodaj książkę). Zostanie wyświetlona odpowiedź podobna do poniższego przykładu:
Book added successfully: {"id":1,"author":"Jeff Black","title":"Spring In Action"}
6. Czyszczenie zasobów
Możesz usunąć grupę zasobów platformy Azure zawierającą wszystkie zasoby w tej grupie. Wykonaj następujące kroki, aby usunąć całą grupę zasobów, w tym nowo utworzoną usługę:
Znajdź grupę zasobów w witrynie Azure Portal.
Wybierz pozycję Grupy zasobów, a następnie wybierz nazwę grupy zasobów, na przykład myresourcegroup.
Na stronie grupy zasobów wybierz pozycję Usuń. Wprowadź nazwę grupy zasobów w polu tekstowym, aby potwierdzić usunięcie.
Wybierz Usuń.
7. Następne kroki
Aby uzyskać więcej informacji, zobacz następujące artykuły:
- Przykłady usługi Azure Spring Apps.
- Oprogramowanie Spring na platformie Azure
- Spring Cloud Azure