Samouczek: uwierzytelnianie klienta za pomocą usługi Spring Cloud Gateway w usłudze Azure Spring Apps

Uwaga

Pierwsze 50 godzin procesorów wirtualnych i 100 GB pamięci jest bezpłatne każdego miesiąca. Aby uzyskać więcej informacji, zobacz Price Reduction — Azure Spring Apps robi więcej, kosztuje mniej! w blogu Aplikacje na platformie Azure.

Uwaga

Azure Spring Apps to nowa nazwa usługi Azure Spring Cloud. Mimo że usługa ma nową nazwę, stara nazwa będzie widoczna w niektórych miejscach przez pewien czas, ponieważ pracujemy nad aktualizowaniem zasobów, takich jak zrzuty ekranu, filmy wideo i diagramy.

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

2. Przygotowanie projektu Spring

Aby sklonować i uruchomić aplikację lokalnie, wykonaj następujące kroki:

  1. 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
    
  2. Użyj następującego polecenia, aby skompilować usługi zaplecza Książki:

    cd azure-spring-apps-sso-client-credential
    ./mvnw clean package
    
  3. 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:

  1. Wybierz pozycję Utwórz zasób w rogu witryny Azure Portal.

  2. Wybierz pozycję Compute>Azure Spring Apps.

    Screenshot of the Azure portal that shows the Create a resource page with Azure Spring Apps highlighted.

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

    Screenshot of the Azure portal that shows the Create Azure Spring Apps consumption plan page.

    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.

    Screenshot of the Azure portal that shows the Create Azure Container Apps page.

    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.

  4. Wybierz pozycję Przejrzyj i Utwórz , aby przejrzeć wybrane opcje. Wybierz pozycję Utwórz , aby aprowizować wystąpienie usługi Azure Spring Apps.

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

    Screenshot of the Azure portal that shows the Overview page with the Notifications pane open.

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

  1. Przejdź do strony głównej witryny Azure Portal.

  2. 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ę.

  3. Wyszukaj i wybierz Tożsamość Microsoft Entra.

  4. W obszarze Zarządzanie wybierz pozycję Rejestracje aplikacji> Nowa rejestracja.

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

  6. W obszarze Obsługiwane typy kont wybierz pozycję Konta tylko w tym katalogu organizacyjnym.

  7. Wybierz pozycję Zarejestruj, aby utworzyć aplikację.

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

  9. W obszarze Zarządzanie wybierz pozycję Uwidaczniaj interfejs API, znajdź identyfikator URI identyfikatora aplikacji na początku strony, a następnie wybierz pozycję Dodaj.

  10. 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 jak api://books, a następnie wybierz pozycję Zapisz.

  11. 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.
  12. Powtórz poprzedni krok, aby dodać inną rolę aplikacji: Books.Read.

    Screenshot of the Books app registration page that shows the App roles.

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.

  1. Wróć do dzierżawy w usłudze Microsoft Entra ID.

  2. W obszarze Zarządzanie wybierz pozycję Rejestracje aplikacji> Nowa rejestracja.

  3. Wprowadź nazwę aplikacji w polu Nazwa , na przykład SPA.

  4. W przypadku obsługiwanych typów kont użyj tylko domyślnych kont w tym katalogu organizacyjnym.

  5. Wybierz pozycję Zarejestruj, aby utworzyć aplikację.

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

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

  8. Wybierz pozycję Udziel zgody administratora dla <nazwy> dzierżawy, aby udzielić zgody administratora dla dodanych uprawnień.

    Screenshot of the SPA API permissions page that shows the API permissions of a web application.

  9. Przejdź do pozycji Certyfikaty i wpisy tajne , a następnie wybierz pozycję Nowy klucz tajny klienta.

  10. Na stronie Dodawanie wpisu tajnego klienta wprowadź opis wpisu tajnego, wybierz datę wygaśnięcia, a następnie wybierz pozycję Dodaj.

  11. 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:

  1. 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 klawisz 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 klawisz 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 klawisz 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.
  2. 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.

  1. Przejdź do http://localhost:3000 witryny w przeglądarce, aby uzyskać dostęp do aplikacji.

  2. 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ę:

  1. Znajdź grupę zasobów w witrynie Azure Portal.

  2. Wybierz pozycję Grupy zasobów, a następnie wybierz nazwę grupy zasobów, na przykład myresourcegroup.

  3. Na stronie grupy zasobów wybierz pozycję Usuń. Wprowadź nazwę grupy zasobów w polu tekstowym, aby potwierdzić usunięcie.

  4. Wybierz Usuń.

7. Następne kroki

Aby uzyskać więcej informacji, zobacz następujące artykuły: