역할 및 역할 클레임을 사용하여 Java Spring Boot 앱 보호

이 문서에서는 인증, 권한 부여 및 토큰 획득을 위해 Java용 Microsoft Entra ID Spring Boot Starter 클라이언트 라이브러리를 사용하는 Java Spring Boot 웹앱을 보여 줍니다. 앱은 OpenID Connect 프로토콜을 사용하여 사용자를 로그인하고 권한 부여를 위해 Microsoft Entra ID 애플리케이션 역할(앱 역할)을 사용하여 일부 경로에 대한 액세스를 제한합니다.

앱 역할은 보안 그룹과 함께 권한 부여를 구현하는 인기 있는 수단입니다. 애플리케이션 역할 및 역할 클레임과 함께 RBAC(역할 기반 액세스 제어)를 사용하면 최소한의 노력으로 권한 부여 정책을 안전하게 적용할 수 있습니다. 또 다른 방법은 Microsoft Entra ID 그룹 및 그룹 클레임을 사용하는 것입니다. Microsoft Entra ID 그룹 및 애플리케이션 역할은 상호 배타적이지 않습니다. 둘 다 사용하여 세분화된 액세스 제어를 제공할 수 있습니다.

유사한 시나리오를 다루는 비디오는 앱 역할, 보안 그룹, 범위 및 디렉터리 역할을 사용하여 애플리케이션에서 권한 부여 구현을 참조하세요.

이 시나리오 및 기타 시나리오에서 프로토콜이 작동하는 방식에 대한 자세한 내용은 인증 및 권한 부여를 참조하세요.

다음 다이어그램은 앱의 토폴로지입니다.

앱의 토폴로지 다이어그램

앱은 Java용 Microsoft Entra ID Spring Boot Starter 클라이언트 라이브러리를 사용하여 사용자를 로그인하고 Microsoft Entra ID에서 ID 토큰가져옵니다. ID 토큰에는 역할 클레임이 포함됩니다. 애플리케이션은 이 클레임의 값을 검사하여 사용자에게 액세스 권한이 부여된 페이지를 결정합니다.

이러한 종류의 권한 부여는 RBAC를 사용하여 구현됩니다. RBAC를 사용하면 관리자는 개별 사용자 또는 그룹이 아닌 역할에 대한 권한을 부여합니다. 그런 다음 관리자는 다른 사용자 및 그룹에 역할을 할당하여 특정 콘텐츠 및 기능에 대한 액세스 권한이 있는 사용자를 제어할 수 있습니다.

이 샘플 애플리케이션은 다음 두 애플리케이션 역할을 정의합니다.

  • PrivilegedAdmin: 관리자 전용 및 일반 사용자 페이지에 액세스할 수 있는 권한이 부여되었습니다.
  • RegularUser: 일반 사용자 페이지에 액세스할 수 있는 권한이 부여되었습니다.

이러한 애플리케이션 역할은 애플리케이션의 등록 매니페스트의 Azure Portal에서 정의됩니다. 사용자가 애플리케이션에 로그인하면 Microsoft Entra ID는 역할 멤버 자격의 형태로 사용자에게 개별적으로 부여된 각 역할에 대한 역할 클레임을 내보낸다.

Azure Portal을 통해 역할에 사용자 및 그룹을 할당할 수 있습니다.

참고 항목

엔드포인트가 사용자를 로그인하는 권한으로 사용되는 경우 https://login.microsoftonline.com/common/ 테넌트의 게스트 사용자에 대한 역할 클레임이 없습니다. 다음과 같이 https://login.microsoftonline.com/tenantid테넌트 엔드포인트에 사용자를 로그인해야 합니다.

필수 조건

  • JDK 버전 15. 이 샘플은 Java 15를 사용하는 시스템에서 개발되었지만 다른 버전과 호환될 수 있습니다.
  • Maven 3
  • Visual Studio Code용 Java 확장 팩은 Visual Studio Code 에서 이 샘플을 실행하는 데 권장됩니다.
  • Microsoft Entra ID 테넌트. 자세한 내용은 Microsoft Entra ID 테넌트를 가져오는 방법을 참조 하세요.
  • Microsoft Entra ID 테넌트에 있는 사용자 계정입니다. 이 샘플은 개인 Microsoft 계정에서 작동하지 않습니다. 따라서 개인 계정 사용하여 Azure Portal로그인하고 디렉터리에 사용자 계정이 없는 경우 지금 만들어야 합니다.
  • Visual Studio Code
  • Visual Studio Code용 Azure 도구

권장 사항

샘플 설정

다음 섹션에서는 샘플 애플리케이션을 설정하는 방법을 보여줍니다.

샘플 리포지토리 복제 또는 다운로드

샘플을 복제하려면 Bash 창을 열고 다음 명령을 사용합니다.

git clone https://github.com/Azure-Samples/ms-identity-msal-java-samples.git
cd 4-spring-web-app/3-Authorization-II/roles

또는 ms-identity-msal-java-samples 리포지토리로 이동한 다음, .zip 파일로 다운로드하여 하드 드라이브에 추출합니다.

Important

Windows에서 파일 경로 길이 제한을 방지하려면 리포지토리를 하드 드라이브 루트 근처의 디렉터리에 복제하거나 추출합니다.

Microsoft Entra ID 테넌트에 샘플 애플리케이션 등록

이 샘플에는 하나의 프로젝트가 있습니다. 다음 섹션에서는 Azure Portal을 사용하여 앱을 등록하는 방법을 보여 줍니다.

애플리케이션을 만들 Microsoft Entra ID 테넌트 선택

테넌트 선택하려면 다음 단계를 사용합니다.

  1. Azure Portal에 로그인합니다.

  2. 계정이 둘 이상의 Microsoft Entra ID 테넌트에 있는 경우 Azure Portal 모서리에서 프로필을 선택한 다음 디렉터리 전환을 선택하여 세션을 원하는 Microsoft Entra ID 테넌트로 변경합니다.

앱 등록(java-spring-webapp-roles)

앱을 등록하려면 다음 단계를 사용합니다.

  1. Azure Portal로 이동하여 Microsoft Entra ID를 선택합니다.

  2. 탐색 창에서 앱 등록을 선택한 다음, 새 등록을 선택합니다.

  3. 표시되는 애플리케이션 등록 페이지에서 다음 애플리케이션 등록 정보를 입력합니다.

    • 이름 섹션에서 앱 사용자에게 표시할 의미 있는 애플리케이션 이름(예java-spring-webapp-roles: .)을 입력합니다.
    • 지원되는 계정 유형 아래에서 이 조직 디렉터리의 계정만을 선택합니다.
    • 리디렉션 URI(선택 사항) 섹션에서 콤보 상자에서 웹을 선택하고 다음 리디렉션 URIhttp://localhost:8080/login/oauth2/code/를 입력합니다.
  4. 등록을 선택하여 애플리케이션을 만듭니다.

  5. 앱의 등록 페이지에서 나중에 사용할 애플리케이션(클라이언트) ID 값을 찾아 복사합니다. 앱의 구성 파일 또는 파일에서 이 값을 사용합니다.

  6. 앱의 등록 페이지에서 탐색 창에서 인증서 및 비밀을 선택하여 비밀을 생성하고 인증서를 업로드할 수 있는 페이지를 엽니다.

  7. 클라이언트 비밀 섹션에서 새 클라이언트 비밀을 선택합니다.

  8. 설명(예: 앱 비밀)을 입력합니다.

  9. 사용 가능한 기간 중 하나(1년, 2년 후 또는 만료 안 됨) 중 하나를 선택합니다.

  10. 추가를 선택합니다. 생성된 값이 표시됩니다.

  11. 이후 단계에서 사용할 생성된 값을 복사하고 저장합니다. 코드의 구성 파일에 이 값이 필요합니다. 이 값은 다시 표시되지 않으며 다른 어떤 수단으로도 검색할 수 없습니다. 따라서 다른 화면 또는 창으로 이동하기 전에 Azure Portal에서 저장해야 합니다.

앱 역할 정의

앱 역할을 정의하려면 다음 단계를 사용합니다.

  1. 동일한 앱 등록에서 탐색 창에서 앱 역할을 선택합니다.

  2. 앱 역할 만들기를 선택한 다음, 다음 값을 입력합니다.

    • 표시 이름적합한 이름(예: PrivilegedAdmin)을 입력합니다.
    • 허용되는 멤버 형식의 경우 사용자를 선택합니다.
    • 값에 대해 PrivilegedAdmin을 입력합니다.
    • 설명을 보려면 관리자 페이지를 볼 수 있는 PrivilegedAdmins를 입력합니다.
  3. 앱 역할 만들기를 선택한 다음, 다음 값을 입력합니다.

    • 표시 이름에 적합한 이름(예: RegularUser)을 입력합니다.
    • 허용되는 멤버 형식의 경우 사용자를 선택합니다.
    • 에 RegularUser를 입력합니다.
    • 설명을 보려면 사용자 페이지를 볼 수 있는 RegularUsers를 입력합니다.
  4. 적용을 선택하여 변경 내용을 저장합니다.

앱 역할에 사용자 할당

앞에서 정의한 앱 역할에 사용자를 추가하려면 다음 지침을 따릅니다. 역할에 사용자 및 그룹 할당.


앱 등록을 사용하도록 앱 구성(java-spring-webapp-roles)

다음 단계를 사용하여 앱을 구성합니다.

참고 항목

다음 단계에서 ClientID 는 같거나 AppId같습니다Application ID.

  1. IDE에서 프로젝트를 엽니다.

  2. src\main\resources\application.yml 파일을 엽니다.

  3. 자리 표시자를 Enter_Your_Tenant_ID_Here 찾아 기존 값을 Microsoft Entra 테넌트 ID로 바꿉니다.

  4. 자리 표시자를 Enter_Your_Client_ID_Here 찾아 기존 값을 Azure Portal에서 복사한 애플리케이션 ID 또는 clientId 앱으로 java-spring-webapp-roles 바꿉니다.

  5. 자리 표시자를 Enter_Your_Client_Secret_Here 찾아 기존 값을 Azure Portal에서 복사를 만드는 java-spring-webapp-roles 동안 저장한 값으로 바꿉니다.

  6. src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootapplication/Sample.Controller.java 파일을 엽니다.

  7. 이 파일에서 앱 역할에 대한 참조 PrivilegedAdmin RegularUser 를 찾습니다. 필요한 경우 이전 단계에서 선택한 앱 역할 이름을 반영하도록 변경합니다.

샘플 실행

다음 섹션에서는 Azure Container Apps에 샘플을 배포하는 방법을 보여줍니다.

필수 조건

  • Azure 계정. 아직 없는 경우 무료 계정을 만들 수 있습니다. 계속 진행하려면 Azure 구독에 대한 기여자 또는 소유자 권한이 필요합니다. 자세한 내용은 Azure Portal을 사용하여 Azure 역할 할당을 참조하십시오.
  • Azure CLI
  • Azure Container Apps CLI 확장, 버전 0.3.47 이상 최신 버전을 설치하려면 명령을 사용합니다 az extension add --name containerapp --upgrade --allow-preview .
  • Java 개발 키트 버전 17 이상.
  • Maven

Spring 프로젝트 준비

다음 단계를 수행하여 프로젝트를 준비합니다.

  1. 다음 Maven 명령을 사용하여 프로젝트를 빌드합니다.

    mvn clean verify
    
  2. 다음 명령을 사용하여 샘플 프로젝트를 로컬로 실행합니다.

    mvn spring-boot:run
    

설정

CLI에서 Azure에 로그인하려면 다음 명령을 실행하고 프롬프트에 따라 인증 프로세스를 완료합니다.

az login

최신 버전의 CLI를 실행하고 있는지 확인하려면 업그레이드 명령을 실행합니다.

az upgrade

그런 다음 CLI용 Azure Container Apps 확장을 설치하거나 업데이트합니다.

Azure CLI에서 명령을 실행할 az containerapp 때 누락된 매개 변수에 대한 오류가 발생하는 경우 최신 버전의 Azure Container Apps 확장이 설치되어 있는지 확인합니다.

az extension add --name containerapp --upgrade

참고 항목

2024년 5월부터 Azure CLI 확장 기능은 기본적으로 미리 보기 기능을 사용하도록 설정하지 않습니다. Container Apps 미리 보기 기능에 액세스하려면 --allow-preview true를 사용하여 Container Apps 확장을 설치합니다.

az extension add --name containerapp --upgrade --allow-preview true

이제 현재 확장 또는 모듈이 설치되었으므로 Microsoft.AppMicrosoft.OperationalInsights 네임스페이스를 등록합니다.

참고 항목

Azure Container Apps 리소스가 Microsoft.Web 네임스페이스에서 Microsoft.App 네임스페이스로 마이그레이션되었습니다. 자세한 내용은 2022년 3월 Microsoft.Web에서 Microsoft.App으로 네임스페이스 마이그레이션을 참조하세요.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

Azure Container Apps 환경 만들기

이제 Azure CLI 설정이 완료되었으므로 이 문서 전체에서 사용되는 환경 변수를 정의할 수 있습니다.

bash 셸에서 다음 변수를 정의합니다.

export RESOURCE_GROUP="ms-identity-containerapps"
export LOCATION="canadacentral"
export ENVIRONMENT="env-ms-identity-containerapps"
export API_NAME="ms-identity-api"
export JAR_FILE_PATH_AND_NAME="./target/ms-identity-spring-boot-webapp-0.0.1-SNAPSHOT.jar"

리소스 그룹을 만듭니다.

az group create  \
    --name $RESOURCE_GROUP \
    --location $LOCATION \

자동 생성된 Log Analytics 작업 영역을 사용하여 환경을 만듭니다.

az containerapp env create \
    --name $ENVIRONMENT \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION

컨테이너 앱 환경의 기본 도메인을 표시합니다. 이후 섹션에서 사용할 이 도메인을 적어둡니다.

az containerapp env show \
    --name $ENVIRONMENT \
    --resource-group $RESOURCE_GROUP \
    --query properties.defaultDomain

배포를 위한 앱 준비

Azure Container Apps에 애플리케이션을 배포하면 리디렉션 URL이 Azure Container Apps에 배포된 앱 인스턴스의 리디렉션 URL로 변경됩니다. 다음 단계를 사용하여 application.yml 파일에서 이러한 설정을 변경합니다.

  1. 다음 예제와 같이 앱의 src\main\resources\application.yml 파일로 이동하고 배포된 앱의 도메인 이름으로 값을 post-logout-redirect-uri 변경합니다. 실제 값으로 <default-domain-of-container-app-environment> 바꾸어 <API_NAME> 야 합니다. 예를 들어 이전 단계의 Azure Container App 환경 및 ms-identity-api 앱 이름에 대한 기본 도메인을 사용하여 값에 post-logout-redirect-uri 사용합니다https://ms-identity-api.<default-domain>.

    post-logout-redirect-uri: https://<API_NAME>.<default-domain-of-container-app-environment>
    
  2. 이 파일을 저장한 후 다음 명령을 사용하여 앱을 다시 빌드합니다.

    mvn clean package
    

Important

애플리케이션의 application.yml 파일은 현재 매개 변수에 클라이언트 암호 client-secret 의 값을 보유합니다. 이 파일에 이 값을 유지하는 것은 좋지 않습니다. Git 리포지토리에 파일을 커밋하는 경우에도 위험을 감수할 수 있습니다. 권장되는 방법은 Azure Container Apps의 비밀 관리를 참조 하세요.

Microsoft Entra ID 앱 등록 업데이트

리디렉션 URI가 Azure Container Apps에서 배포된 앱으로 변경되므로 Microsoft Entra ID 앱 등록에서도 리디렉션 URI를 변경해야 합니다. 다음 단계에 따라 이 변경을 수행합니다.

  1. 개발자용 Microsoft ID 플랫폼의 앱 등록 페이지로 이동합니다.

  2. 검색 상자를 사용하여 앱 등록을 검색합니다(예: .) java-servlet-webapp-authentication.

  3. 이름을 선택하여 앱 등록을 엽니다.

  4. 메뉴에서 인증을 선택합니다.

  5. - 리디렉션 URI 섹션에서 URI 추가를 선택합니다.

  6. 앱의 URI를 입력하고 /login/oauth2/code/ 추가합니다(예 https://<containerapp-name>.<default domain of container app environment>/login/oauth2/code/: .).

  7. 저장을 선택합니다.

앱 배포하기

Azure Container Apps에 JAR 패키지를 배포합니다.

참고 항목

필요한 경우 Java 빌드 환경 변수에서 JDK 버전을 지정할 수 있습니다. 자세한 내용은 Azure Container Apps에서 Java용 빌드 환경 변수를 참조 하세요.

이제 az containerapp up CLI 명령을 사용하여 WAR 파일을 배포할 수 있습니다.

az containerapp up \
    --name $API_NAME \
    --resource-group $RESOURCE_GROUP \
    --location $LOCATION \
    --environment $ENVIRONMENT \
    --artifact <JAR_FILE_PATH_AND_NAME> \
    --ingress external \
    --target-port 8080 \
    --query properties.configuration.ingress.fqdn

참고 항목

기본 JDK 버전은 17입니다. 애플리케이션과의 호환성을 위해 JDK 버전을 변경해야 하는 경우 --build-env-vars BP_JVM_VERSION=<YOUR_JDK_VERSION> 인수를 사용하여 버전 번호를 조정할 수 있습니다.

더 많은 빌드 환경 변수는 Azure Container Apps에서 Java용 빌드 환경 변수를 참조 하세요.

앱 유효성 검사

이 예제 containerapp up 에서 명령은 앱의 --query properties.configuration.ingress.fqdn URL이라고도 하는 FQDN(정규화된 도메인 이름)을 반환하는 인수를 포함합니다. 다음 단계를 수행하여 앱의 로그를 확인해 배포 문제를 조사합니다.

  1. 배포 섹션의 출력 페이지에서 출력 애플리케이션 URL액세스합니다.

  2. Azure Container Apps 인스턴스 개요 페이지의 탐색 창에서 로그를 선택하여 앱의 로그를 확인합니다.

샘플 탐색

다음 단계를 사용하여 샘플을 탐색합니다.

  1. 화면 중앙에 로그인 또는 로그아웃 상태가 표시됩니다.
  2. 모서리에서 상황에 맞는 단추를 선택합니다. 이 단추는 앱을 처음 실행할 때 로그인을 읽습니다. 또는 토큰 세부 정보, 관리자만 또는 일반 사용자를 선택합니다. 이러한 페이지는 보호되고 인증이 필요하므로 로그인 페이지로 자동으로 리디렉션됩니다.
  3. 다음 페이지에서 지침을 따르고 Microsoft Entra ID 테넌트에 있는 계정으로 로그인합니다.
  4. 동의 화면에서 요청되는 범위를 확인합니다.
  5. 로그인 흐름이 성공적으로 완료되면 로그인 흐름을 트리거한 단추에 따라 로그인 상태를 표시하는 홈 페이지 또는 다른 페이지 중 하나로 리디렉션되어야 합니다.
  6. 이제 상황에 맞는 단추에 로그아웃이 표시되고 사용자 이름이 표시됩니다.
  7. 홈페이지에 있는 경우 ID 토큰 세부 정보를 선택하여 역할을 포함하여 ID 토큰의 디코딩된 클레임 중 일부를 확인합니다.
  8. 관리자만 선택하여 을 봅니다/admin_only. 앱 역할이 PrivilegedAdmin 있는 사용자만 이 페이지를 볼 수 있습니다. 그렇지 않으면 권한 부여 실패 메시지가 표시됩니다.
  9. 일반 사용자를 선택하여 페이지를 봅니다/regular_user. 앱 역할을 RegularUser 가진 사용자만 또는 PrivilegedAdmin 이 페이지를 볼 수 있습니다. 그렇지 않으면 권한 부여 실패 메시지가 표시됩니다.
  10. 모서리의 단추를 사용하여 로그아웃합니다. 상태 페이지에 새 상태가 반영됩니다.

코드 정보

이 샘플에서는 Java용 Microsoft Entra ID Spring Boot Starter 클라이언트 라이브러리를 사용하여 사용자를 Microsoft Entra ID 테넌트에 로그인하는 방법을 보여 줍니다. 또한 샘플에서는 Spring Oauth2 클라이언트 및 Spring Web 부팅 스타터를 사용합니다. 샘플에서는 Microsoft Entra ID에서 가져온 ID 토큰의 클레임을 사용하여 로그인한 사용자의 세부 정보를 표시하고 권한 부여를 위해 역할 클레임을 사용하여 일부 페이지에 대한 액세스를 제한합니다.

콘텐츠

다음 표에서는 샘플 프로젝트 폴더의 내용을 보여 줍니다.

파일/폴더 설명
pom.xml 애플리케이션 종속성.
src/main/resources/templates/ UI용 Thymeleaf 템플릿입니다.
src/main/resources/application.yml 애플리케이션 및 Microsoft Entra ID 부팅 시작 라이브러리 구성.
src/main/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/ 이 디렉터리에는 기본 애플리케이션 진입점, 컨트롤러 및 구성 클래스가 포함됩니다.
.../MsIdentitySpringBootWebappApplication.java 기본 클래스입니다.
.../SampleController.java 엔드포인트 매핑이 있는 컨트롤러입니다.
.../SecurityConfig.java 보안 구성 - 예를 들어 인증이 필요한 경로입니다.
.../Utilities.java 유틸리티 클래스 - 예를 들어 ID 토큰 클레임을 필터링합니다.
CHANGELOG.md 샘플의 변경 내용 목록입니다.
CONTRIBUTING.md 샘플에 기여하기 위한 지침입니다.
라이선스' 샘플에 대한 라이선스입니다.

ID 토큰 클레임

토큰 세부 정보를 추출하기 위해 앱은 다음 예제와 같이 요청 매핑에서 Spring Security AuthenticationPrincipalOidcUser 개체를 사용합니다. 이 앱이 ID 토큰 클레임을 사용하는 방법에 대한 자세한 내용은 샘플 컨트롤러 를 참조하세요.

import org.springframework.security.oauth2.core.oidc.user.OidcUser;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
//...
@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
    Map<String, Object> claims = principal.getIdToken().getClaims();
}

ID 토큰에서 역할 클레임 처리

토큰의 역할 클레임에는 다음 예제와 같이 로그인한 사용자가 할당한 역할의 이름이 포함됩니다.

{
  ...
  "roles": [
    "PrivilegedAdmin",
    "RegularUser",]
  ...
}

역할 이름에 액세스하는 일반적인 방법은 ID 토큰 클레임 섹션에 설명되어 있습니다.

또한 Microsoft Entra ID Boot Starter v3.3 이상에서는 역할 클레임을 자동으로 구문 분석하고 로그인한 사용자의 Authorities역할에 각 역할을 추가하여 각각 문자열 APPROLE_을 접두사로 추가합니다. 이 구성을 통해 개발자는 이 메서드를 사용하여 hasAuthority Spring PrePost 조건 주석으로 앱 역할을 사용할 수 있습니다. 예를 들어 SampleController.java 다음과 같은 @PreAuthorize 조건을 확인할 수 있습니다.

@GetMapping(path = "/admin_only")
@PreAuthorize("hasAuthority('APPROLE_PrivilegedAdmin')")
public String adminOnly(Model model) {
    // restrict to users who have PrivilegedAdmin app role only
}
@GetMapping(path = "/regular_user")
@PreAuthorize("hasAnyAuthority('APPROLE_PrivilegedAdmin','APPROLE_RegularUser')")
public String regularUser(Model model) {
    // restrict to users who have any of RegularUser or PrivilegedAdmin app roles
}

다음 코드는 지정된 사용자에 대한 권한의 전체 목록을 가져옵니다.

@GetMapping(path = "/some_path")
public String tokenDetails(@AuthenticationPrincipal OidcUser principal) {
   Collection<? extends GrantedAuthority> authorities = principal.getAuthorities();
}

로그인의 경우 앱은 다음 예제와 같이 Java용 Microsoft Entra ID Spring Boot Starter 클라이언트 라이브러리에 의해 자동으로 구성된 Microsoft Entra ID 로그인 엔드포인트에 대한 요청을 수행합니다.

<a class="btn btn-success" href="/oauth2/authorization/azure">Sign In</a>

로그아웃의 경우 앱은 다음 예제와 같이 엔드포인트에 logout POST 요청을 수행합니다.

<form action="#" th:action="@{/logout}" method="post">
  <input class="btn btn-warning" type="submit" value="Sign Out" />
</form>

인증 종속 UI 요소

앱에는 Spring Security Thymeleaf 태그를 사용하는 다음 예제와 같이 사용자가 인증되었는지 여부에 따라 표시할 콘텐츠를 결정하기 위한 몇 가지 간단한 논리가 UI 템플릿 페이지에 있습니다.

<div sec:authorize="isAuthenticated()">
  this content only shows to authenticated users
</div>
<div sec:authorize="isAnonymous()">
  this content only shows to not-authenticated users
</div>

AADWebSecurityConfigurerAdapter를 사용하여 경로 보호

기본적으로 앱은 로그인한 사용자만 액세스할 수 있도록 ID 토큰 세부 정보, 관리자 전용일반 사용자 페이지를 보호합니다. 앱은 application.yml 파일의 app.protect.authenticated 속성에서 이러한 경로를 구성합니다. 앱의 특정 요구 사항을 구성하려면 클래스 중 하나에서 확장 AADWebSecurityConfigurationAdapter 할 수 있습니다. 예를 들어 다음 코드에 표시된 이 앱의 SecurityConfig 클래스를 참조하세요.

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfig extends AADWebSecurityConfigurerAdapter{
  @Value( "${app.protect.authenticated}" )
  private String[] protectedRoutes;

    @Override
    public void configure(HttpSecurity http) throws Exception {
    // use required configuration form AADWebSecurityAdapter.configure:
    super.configure(http);
    // add custom configuration:
    http.authorizeRequests()
      .antMatchers(protectedRoutes).authenticated()     // limit these pages to authenticated users (default: /token_details, /admin_only, /regular_user)
      .antMatchers("/**").permitAll();                  // allow all other routes.
    }
}

자세한 정보

이 시나리오 및 기타 시나리오에서 OAuth 2.0 프로토콜이 작동하는 방식에 대한 자세한 내용은 Microsoft Entra ID에 대한 인증 시나리오를 참조하세요.