자습서: Azure Spring Apps에서 Spring Cloud Gateway를 사용하여 클라이언트 인증
참고 항목
기본, 표준 및 엔터프라이즈 계획은 2025년 3월 중순부터 사용되지 않으며 3년의 은퇴 기간이 있습니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 사용 중지 공지 사항을 참조하세요.
표준 소비 및 전용 계획은 2024년 9월 30일부터 사용되지 않으며 6개월 후에 완전히 종료됩니다. Azure Container Apps로 전환하는 것이 좋습니다. 자세한 내용은 Azure Spring Apps 표준 사용량 및 전용 계획을 Azure Container Apps로 마이그레이션을 참조 하세요.
이 문서는 표준 사용량 및 전용(미리 보기)에 적용됩니다.✅
이 빠른 시작에서는 Azure Spring Apps에서 호스트되고 Spring Cloud Gateway 앱으로 보호되는 클라이언트 애플리케이션과 마이크로 서비스 애플리케이션 간의 통신을 보호하는 방법을 보여줍니다. 클라이언트 애플리케이션은 Spring Cloud Gateway로 빌드된 앱을 사용하여 Azure Spring Apps에 배포된 마이크로 서비스와의 연결을 시작하는 보안 주체로 확인됩니다. 이 메서드는 OAuth 2.0 클라이언트 자격 증명 흐름의 실행을 통해 실현된 인증 및 권한 부여 프로세스에 Spring Cloud Gateway의 토큰 릴레이 및 Spring Security의 리소스 서버 기능을 사용합니다.
다음 목록에서는 샘플 프로젝트의 컴퍼지션을 보여줍니다.
- Books SPA: 로컬에서 호스트되는 이 SPA(단일 페이지 애플리케이션)는 책 추가 또는 검색을 위한 Books 마이크로 서비스와 상호 작용합니다.
- Books 마이크로 서비스:
- Azure Spring Apps에서 호스트되는 Spring Cloud Gateway 앱입니다. 이 앱은 Books RESTful API에 대한 게이트웨이로 작동합니다.
- Azure Spring Apps에서 호스트되는 Spring Boot RESTful API 앱입니다. 이 앱은 H2 데이터베이스에 책 정보를 저장합니다. Books 서비스는 책을 쓰고 읽을 수 있는 2개의 REST 엔드포인트를 공개합니다.
1. 사전 요구 사항
- Azure 구독 구독이 없는 경우 시작하기 전에 체험 계정을 만드세요.
- Git
- Java Development Kit (JDK), 버전 17.
- Microsoft Entra 테넌트. Microsoft Entra 테넌트를 만드는 방법에 대한 자세한 내용은 빠른 시작: Microsoft Entra ID에서 새 테넌트 만들기를 참조하세요.
- Azure CLI: 버전 2.45.0 이상
- Node.js를 설치합니다.
2. Spring 프로젝트 준비
다음 단계를 따라 앱을 로컬로 복제하고 실행합니다.
다음 명령을 사용하여 GitHub에서 샘플 프로젝트를 복제합니다.
git clone https://github.com/Azure-Samples/azure-spring-apps-sso-client-credential.git -b consumption-plan
다음 명령을 사용하여 Books 백 엔드 서비스를 빌드합니다.
cd azure-spring-apps-sso-client-credential ./mvnw clean package
SPA 프로젝트 디렉터리를 입력하고 다음 명령을 사용하여 종속성을 설치합니다.
npm install @azure/msal-node
3. 클라우드 환경 준비
이 샘플을 실행하는 데 필요한 주요 리소스는 Azure Spring Apps 인스턴스와 Azure Database for PostgreSQL 인스턴스입니다. 이 섹션에서는 이러한 리소스를 만드는 단계를 설명합니다.
3.1. Azure Portal에 로그인
웹 브라우저를 열고 Azure Portal로 이동합니다. 자격 증명을 입력하여 Azure Portal에 로그인합니다. 기본 보기는 서비스 대시보드입니다.
3.2. Azure Spring Apps 인스턴스 만들기
다음 단계를 따라 서비스 인스턴스를 만듭니다.
Azure Portal의 모서리에서 리소스 만들기를 선택합니다.
컴퓨팅>Azure Spring Apps를 선택합니다.
다음 정보로 기본 사항 양식을 입력합니다.
설정 제안 값 설명 Subscription 구독 이름 서버에 사용할 Azure 구독입니다. 구독이 여러 개인 경우 해당 리소스에 대해 요금이 청구되는 구독을 선택합니다. Resource group myresourcegroup 새 리소스 그룹 이름 또는 구독의 기존 이름입니다. 이름 myasa Azure Spring Apps 서비스를 식별하는 고유한 이름입니다. 이름은 4-32자 사이여야 하며, 소문자, 숫자 및 하이픈(-) 문자만 포함할 수 있습니다. 서비스 이름의 첫 글자는 문자여야 하며 마지막 문자는 문자 또는 숫자여야 합니다. 계획 표준 사용량 및 전용(미리 보기) 요금제에 따라 인스턴스와 관련된 리소스 및 비용이 결정됩니다. 지역 사용자와 가장 가까운 지역 사용자에게 가장 가까운 위치입니다. Container Apps 환경 myacaenv 다른 서비스 및 리소스와 동일한 가상 네트워크를 공유할 Container Apps 환경 인스턴스를 선택합니다. 다음 표를 참조하여 Container Apps 환경을 만듭니다.
설정 제안 값 설명 환경 이름 myacaenv Azure Container Apps 환경 서비스를 식별하는 고유한 이름입니다. 계획 소비 요금제에 따라 인스턴스와 관련된 리소스 및 비용이 결정됩니다. 영역 중복 사용 안 함 Azure 가용성 영역에서 Container Apps 환경 서비스를 만들지 여부입니다. Important
사용량 워크로드 프로필에는 시작 비용이 없는 종량제 청구 모델이 있습니다. 프로비전된 리소스에 따라 전용 워크로드 프로필에 대한 요금이 청구됩니다. 자세한 내용은 Azure Container Apps에서 사용량 + 전용 플랜 구조 환경의 워크로드 프로필(미리 보기) 및 Azure Spring Apps 가격 책정을 참조하세요.
검토 및 만들기를 선택하여 선택 사항을 검토합니다. 만들기를 선택하여 Azure Spring Apps 인스턴스를 프로비전합니다.
배포 프로세스를 모니터링하려면 도구 모음에서 알림 아이콘(벨)을 선택합니다. 배포가 완료되면 대시보드에 고정을 선택하면 Azure Portal 대시보드에서 이 서비스 타일을 서비스 개요 페이지에 대한 바로 가기로 만들 수 있습니다. 리소스로 이동을 선택하여 서비스의 개요 페이지를 엽니다.
다음 명령을 사용하여 Eureka 서버를 사용하도록 설정합니다. 자리 표시자를 이전 단계에서 만든 고유한 값으로 바꿔야 합니다.
az spring eureka-server enable \ --resource-group <resource-group-name> \ --name <Azure-Spring-Apps-instance-name>
3.3. Books 애플리케이션 등록
이 섹션에서는 Azure Spring Apps에서 RESTful API를 보호하는 데 사용되는 Microsoft Entra ID에 앱 역할을 추가하는 애플리케이션을 등록하는 단계를 제공합니다.
Azure Portal 홈페이지로 이동합니다.
여러 테넌트에 액세스할 수 있는 경우 디렉터리 + 구독 필터()를 사용하여 애플리케이션을 등록할 테넌트를’ 선택합니다.
Microsoft Entra ID를 검색하여 선택합니다.
관리 아래에서 앱 등록>새 등록을 선택합니다.
이름 필드에 애플리케이션 이름을 입력합니다(예: Books). 이 이름은 앱의 사용자에게 표시될 수 있으며 나중에 변경할 수 있습니다.
지원되는 계정 유형의 경우 이 조직 디렉터리 계정의 계정만을 선택합니다.
등록을 선택하여 애플리케이션을 만듭니다.
앱 개요 페이지에서 애플리케이션(클라이언트) ID 값을 찾은 후 나중에 사용할 수 있도록 기록합니다. 이 값은 이 프로젝트의 YAML 구성 파일을 구성하는 데 필요합니다.
관리에서 API 공개를 선택하고, 페이지의 시작 부분에서 애플리케이션 ID URI를 찾은 다음, 추가를 선택합니다.
애플리케이션 ID URI 편집 페이지에서 제안된 애플리케이션 ID URI(
api://{client ID}
)를 수락하거나 클라이언트 ID 대신 의미 있는 이름(예:api://books
)을 사용한 다음, 저장을 선택합니다.관리에서 앱 역할>앱 역할 만들기를 선택하고 다음 정보를 입력합니다.
- 표시 이름에 Write를 입력합니다.
- 허용되는 멤버 유형에 애플리케이션을 선택합니다.
- 값에 Books.Write를 입력합니다.
- 설명에 Adding books를 입력합니다.
이전 단계를 반복하여 다른 앱 역할(
Books.Read
)을 추가합니다.
3.4 SPA 애플리케이션 등록
Books RESTful API 앱은 Microsoft Entra ID로 보호되는 리소스 서버로 작동합니다. 액세스 토큰을 획득하기 전에 Microsoft Entra ID에 다른 애플리케이션을 등록하고 SPA
라는 클라이언트 애플리케이션에 권한을 부여해야 합니다.
Microsoft Entra ID의 테넌트로 돌아갑니다.
관리 아래에서 앱 등록>새 등록을 선택합니다.
예를 들어 이름 필드에 애플리케이션 이름을 입력합니다(예:
SPA
).지원되는 계정 유형에서 기본값인 이 조직 디렉터리 계정의 계정만을 선택합니다.
등록을 선택하여 애플리케이션을 만듭니다.
앱 개요 페이지에서 애플리케이션(클라이언트) ID 값을 찾은 후 나중에 사용할 수 있도록 기록합니다. 이 값은 액세스 토큰을 획득하는 데 필요합니다.
API 사용 권한>사용 권한 추가>내 조직에서 사용하는 API를 선택합니다. 이전에 등록한
Books
애플리케이션을 선택하고 Books.Read 및 Books.Write 권한을 선택한 다음 권한 추가를 선택합니다.<your-tenant-name>에 대한 관리자 동의 허용을 선택하여 추가한 권한에 대한 관리자 동의를 부여합니다.
인증서 및 비밀을 선택하고 새 클라이언트 암호를 선택합니다.
클라이언트 암호 추가 페이지에서 설명을 입력하고 만료 날짜를 선택한 다음 추가를 선택합니다.
비밀의 값을 찾은 다음 나중에 사용하기 위해 기록합니다. 이 값은 액세스 토큰을 획득하는 데 필요합니다.
3.5. Books Service 앱의 구성 업데이트
books-service
앱의 books-service/src/main/resources/application.yml 파일을 찾습니다. 다음 예제와 일치하도록 spring.cloud.azure.active-directory
섹션의 구성을 업데이트합니다. 자리 표시자를 이전에 만든 값으로 바꿔야 합니다.
spring:
cloud:
azure:
active-directory:
credential:
client-id: <your-application-ID-of-Books>
app-id-uri: <your-application-ID-URI-of-Books>
다음 명령을 사용하여 샘플 프로젝트를 다시 빌드합니다.
./mvnw clean package
4. Azure Spring Apps에 앱 배포
다음 단계에서는 Azure에 앱을 배포하는 방법을 보여줍니다.
4.1. Azure Spring Apps에 마이크로 서비스 앱 배포
다음 단계를 따라 Azure Spring Apps용 Maven 플러그인을 사용하여 Azure Spring Apps에 앱을 배포합니다.
샘플 프로젝트 디렉터리로 이동하고 다음 명령을 사용하여 Azure Spring Apps에서 앱을 구성합니다.
./mvnw com.microsoft.azure:azure-spring-apps-maven-plugin:1.18.0:config
다음 목록에서는 명령 상호 작용을 설명합니다.
- 구성할 자식 모듈 선택([1-2,4,6] 형식과 같이 쉼표로 구분하여 번호 입력, 모두 선택하려면 ENTER 키): 모두 선택하려면 Enter 키를 누릅니다.
- OAuth2 로그인: OAuth2 프로토콜에 따라 Azure에 대한 로그인 권한을 부여합니다.
- 구독 선택: 만든 Azure Spring Apps 인스턴스의 구독 목록 번호를 선택합니다. 기본값은 목록의 첫 번째 구독입니다. 기본 번호를 사용하는 경우 Enter 키를 직접 누릅니다.
- 배포할 Azure Spring Apps 선택: 만든 Azure Spring Apps 인스턴스의 목록 번호를 선택합니다. 기본 번호를 사용하는 경우 Enter 키를 직접 누릅니다.
- 공용 액세스를 공개할 앱 선택([1-2,4,6] 형식과 같이 쉼표로 구분하여 번호 입력, 아무것도 선택하지 않으려면 ENTER 키):
gateway-service
에 대해 1를 입력합니다. - 위의 모든 구성 저장 확인(Y/n): y를 입력합니다. n을 입력하면 구성이 POM 파일에 저장되지 않습니다.
다음 명령을 사용하여 앱을 배포합니다.
./mvnw azure-spring-apps:deploy
다음 목록에서는 명령 상호 작용에 대해 설명합니다.
- OAuth2 로그인: OAuth2 프로토콜에 따라 Azure에 대한 로그인 권한을 부여해야 합니다.
명령을 실행한 후 배포가 성공했음을 나타내는 다음 로그 메시지를 볼 수 있습니다.
[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. ...
출력 애플리케이션 URL은 ToDo RESTful API 애플리케이션에 액세스하기 위한 기본 엔드포인트입니다.
4.2. SPA 앱을 로컬로 실행
다음 예제와 일치하도록 SPA
애플리케이션 스크립트 파일 spa/server.js의 구성을 업데이트합니다. 자리 표시자를 이전 단계에서 만든 고유한 값으로 바꿔야 합니다.
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"]
};
SPA 프로젝트 디렉터리에서 다음 명령을 사용하여 로컬로 실행합니다.
node server.js
참고 항목
SPA 앱은 모든 웹 서버에 배포할 수 있는 정적 웹 애플리케이션입니다.
5. 앱 유효성 검사
gateway-service
앱을 통해 Books RESTful API와 통신하는 Books SPA 앱에 액세스할 수 있습니다.
사용하는 브라우저에서
http://localhost:3000
으로 이동하여 애플리케이션에 액세스합니다.작성자 및 제목에 대한 값을 입력한 다음 책 추가를 선택합니다. 다음 예제와 유사한 응답이 표시됩니다.
Book added successfully: {"id":1,"author":"Jeff Black","title":"Spring In Action"}
6. 리소스 정리
리소스 그룹의 모든 리소스를 포함하고 있는 Azure 리소스 그룹을 삭제할 수 있습니다. 새로 만든 서비스를 포함하여 전체 리소스 그룹을 삭제하려면 다음 단계를 수행합니다.
Azure Portal에서 리소스 그룹을 찾습니다.
리소스 그룹을 선택한 다음, 리소스 그룹의 이름(예: myresourcegroup)을 선택합니다.
리소스 그룹 페이지에서 삭제를 선택합니다. 텍스트 상자에 리소스 그룹의 이름을 입력하여 삭제를 확인합니다.
삭제를 선택합니다.
7. 다음 단계
자세한 내용은 다음 문서를 참조하세요.