다음을 통해 공유


그룹 및 그룹 클레임을 사용하여 Java Spring Boot 앱 보호

이 문서에서는 인증, 권한 부여 및 토큰 획득을 위해 Java용 Microsoft Entra ID Spring Boot Starter 클라이언트 라이브러리를 사용하는 Java Spring Boot 웹앱을 보여 줍니다. 앱은 OpenID 커넥트 프로토콜을 사용하여 사용자를 로그인하고 Azure Active Directory 보안 그룹 멤버 자격에 따라 페이지에 대한 액세스를 제한합니다.

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

앱의 토폴로지 다이어그램

클라이언트 앱은 Java용 Microsoft Entra ID Spring Boot Starter 클라이언트 라이브러리를 사용하여 Microsoft Entra ID 테넌트에서 사용자를 로그인하고 Microsoft Entra ID에서 ID 토큰을 가져옵니다.

ID 토큰에는 그룹 클레임이 포함됩니다. 애플리케이션은 로그인한 사용자의 Spring GrantedAuthorities 목록에 클레임을 로드합니다. 이러한 값은 사용자에게 액세스 권한이 부여된 페이지를 결정합니다.

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

필수 조건

  • JDK 버전 15. 이 샘플은 Java 15를 사용하는 시스템에서 개발되었지만 다른 버전과 호환될 수 있습니다.
  • Maven 3
  • Visual Studio Code용 Java 확장 팩은 Visual Studio Code 에서 이 샘플을 실행하는 데 권장됩니다.
  • Microsoft Entra ID 테넌트입니다. 자세한 내용은 빠른 시작: 테넌트 설정을 참조하세요.
  • Microsoft Entra ID 테넌트에 있는 사용자 계정입니다. 이 샘플은 개인 Microsoft 계정에서 작동하지 않습니다. 따라서 개인 계정 사용하여 Azure Portal로그인하고 디렉터리에 사용자 계정이 없는 경우 지금 만들어야 합니다.
  • 이 샘플에 서명하고 테스트하려는 사용자 또는 사용자를 포함하는 두 개의 보안 그룹(명명 AdminGroupUserGroup)입니다. 또는 테넌트에 있는 두 개의 기존 보안 그룹에 사용자를 추가할 수 있습니다. 기존 그룹을 사용하도록 선택하는 경우 기존 보안 그룹의 이름과 개체 ID를 사용하도록 샘플 구성을 수정해야 합니다.
  • Visual Studio Code
  • Visual Studio Code용 Azure 도구

권장 사항

샘플 설정

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

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

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

git clone https://github.com/Azure-Samples/ms-identity-java-spring-tutorial.git
cd ms-identity-java-spring-tutorial
cd 3-Authorization-II/groups

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

Important

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

Azure Active Directory 테넌트에 샘플 애플리케이션 등록

이 샘플에는 하나의 프로젝트가 있습니다. Azure Portal에서 앱을 등록하려면 수동 구성 단계를 따르거나 PowerShell 스크립트를 사용할 수 있습니다. 스크립트는 다음 작업을 수행합니다.

  • Microsoft Entra ID 애플리케이션 및 관련 개체(예: 암호, 권한 및 종속성)를 만듭니다.
  • 프로젝트 구성 파일을 수정합니다.

다음 단계를 사용하여 PowerShell 스크립트를 실행합니다.

  1. Windows에서 관리자 권한으로 PowerShell을 실행하고 복제된 디렉터리의 루트로 이동합니다.

  2. Azure AD PowerShell을 사용하는 경우 원본 리포지토리의 앱 만들기 스크립트를 참조하여 환경이 올바르게 준비되었는지 확인합니다.

  3. 다음 명령을 사용하여 PowerShell에 대한 실행 정책을 설정합니다.

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process -Force
    
  4. 다음 명령을 사용하여 구성 스크립트를 실행합니다.

    cd .\AppCreationScripts\
    .\Configure.ps1
    

    참고 항목

    스크립트를 실행하는 다른 방법은 앱 만들기 스크립트에 설명되어 있습니다. 또한 스크립트는 CI/CD 시나리오에 도움이 될 수 있는 자동화된 애플리케이션 등록, 구성 및 제거에 대한 가이드를 제공합니다.

앱 등록 및 보안 그룹(java-spring-webapp-groups)을 사용하도록 코드 샘플 구성

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

참고 항목

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

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

  2. src\기본\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-groups 바꿉니다.

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

  6. 자리 표시자를 Enter_Your_Admin_Group_ID_Here 찾아 기존 값을 관리Group값으로 objectId 바꿉다.

  7. 자리 표시자를 Enter_Your_User_Group_ID_Here 찾아 기존 값을 UserGroup으로 objectId 바꿉다.

  8. src/기본/java/com/microsoft/azuresamples/msal4j/msidentityspringbootwebapp/SampleController.java 파일을 엽니다.

  9. 자리 표시자를 Enter_Your_Admin_Group_ID_Here 찾아 기존 값을 관리Group값으로 objectId 바꿉다.

  10. 자리 표시자를 Enter_Your_User_Group_ID_Here 찾아 기존 값을 UserGroup으로 objectId 바꿉다.

샘플 실행

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

필수 조건

Spring 프로젝트 준비

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

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

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

    mvn spring-boot:run
    

Maven 플러그 인 구성

프로젝트의 루트에서 다음 명령을 실행하여 Azure Spring Apps용 Maven 플러그 인을 사용하여 앱을 구성합니다.

mvn com.microsoft.azure:azure-spring-apps-maven-plugin:1.19.0:config

다음 목록에서는 명령 상호 작용을 설명합니다.

  • OAuth2 로그인: OAuth2 프로토콜에 따라 Azure에 대한 로그인 권한을 부여해야 합니다.
  • 구독 선택: Azure Spring Apps 인스턴스를 만들 구독 목록 번호를 선택합니다. 이 번호는 기본적으로 목록의 첫 번째 구독으로 설정됩니다. 기본 번호를 사용하려면 Enter 키를 누릅니 .
  • Azure Spring Apps 이름 입력: 만들려는 Spring Apps 인스턴스의 이름을 입력합니다. 기본 이름을 사용하려면 Enter 키를 누릅니 .
  • 리소스 그룹 이름 입력: Spring Apps 인스턴스를 만들려는 리소스 그룹의 이름을 입력합니다. 기본 이름을 사용하려면 Enter 키를 누릅니 .
  • SKU: Spring Apps 인스턴스에 사용할 SKU를 선택합니다. 기본 번호를 사용하려면 Enter 키를 누릅니 .
  • 앱 이름 입력(demo): 앱 이름을 제공합니다. 기본 프로젝트 아티팩트 ID를 사용하려면 Enter 키를 누릅니 .
  • 런타임: Spring Apps 인스턴스에 사용할 런타임을 선택합니다. 이 경우 기본 번호를 사용해야 하므로 Enter 키를 누릅니 .
  • 이 앱에 대한 공용 액세스 노출(boot-for-azure): y 키를 누릅니다.
  • 위 모든 구성 저장 확인: y 키를 누릅니다. n 키를 누르면 구성이 .pom 파일에 저장되지 않습니다.

다음 예제에서는 배포 프로세스의 출력을 보여줍니다.

Summary of properties:
Subscription id   : 12345678-1234-1234-1234-123456789101
Resource group name : rg-ms-identity-spring-boot-webapp
Azure Spring Apps name : cluster-ms-identity-spring-boot-webapp
Runtime Java version : Java 11
Region            : eastus
Sku               : Standard
App name          : ms-identity-spring-boot-webapp
Public access     : true
Instance count/max replicas : 1
CPU count         : 1
Memory size(GB)   : 2
Confirm to save all the above configurations (Y/n):
[INFO] Configurations are saved to: /home/user/ms-identity-java-spring-tutorial/1-Authentication/sign-in/pom.    xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  01:57 min
[INFO] Finished at: 2024-02-14T13:50:44Z
[INFO] ------------------------------------------------------------------------

선택 사항을 확인한 후 플러그 인은 필요한 플러그 인 요소와 설정을 프로젝트의 pom.xml 파일에 추가하여 Azure Spring Apps에서 앱을 실행하도록 구성합니다.

pom.xml 파일의 관련 부분은 다음 예제와 유사해야 합니다.

<plugin>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>azure-spring-apps-maven-plugin</artifactId>
    <version>1.19.0</version>
    <configuration>
        <subscriptionId>12345678-1234-1234-1234-123456789101</subscriptionId>
        <resourceGroup>rg-ms-identity-spring-boot-webapp</resourceGroup>
        <clusterName>cluster-ms-identity-spring-boot-webapp</clusterName>
        <region>eastus</region>
        <sku>Standard</sku>
        <appName>ms-identity-spring-boot-webapp</appName>
        <isPublic>true</isPublic>
        <deployment>
            <cpu>1</cpu>
            <memoryInGB>2</memoryInGB>
            <instanceCount>1</instanceCount>
            <runtimeVersion>Java 11</runtimeVersion>
            <resources>
                <resource>
                    <directory>${project.basedir}/target</directory>
                    <includes>
                        <include>*.jar</include>
                    </includes>
                </resource>
            </resources>
        </deployment>
    </configuration>
</plugin>

pom.xml 파일에서 직접 Azure Spring Apps에 대한 구성을 수정할 수 있습니다. 몇 가지 일반적인 구성은 다음 표에 나열되어 있습니다.

속성 필수 설명
subscriptionId false 구독 ID입니다.
resourceGroup true Azure Spring Apps 인스턴스에 대한 Azure 리소스 그룹입니다.
clusterName true Azure Spring Apps 클러스터 이름입니다. Azure Spring Apps 인스턴스가 이미 배포된 구독 및 리소스 그룹을 사용하는 경우 이 기존 클러스터를 사용하여 배포할 수도 있습니다.
appName true Azure Spring Apps의 앱 이름입니다.
region false Azure Spring Apps 인스턴스를 호스트할 지역입니다. 기본값은 eastus입니다. 유효한 지역은 지원되는 지역을 참조 하세요.
sku false Azure Spring Apps 인스턴스의 가격 책정 계층입니다. 기본값은 Basic개발 및 테스트 환경에만 적합한 값입니다.
runtime false 런타임 환경 구성입니다. 자세한 내용은 구성 세부 정보를 참조하세요.
deployment false 배포 구성입니다. 자세한 내용은 구성 세부 정보를 참조하세요.

전체 구성 목록은 플러그 인 참조 설명서를 참조하세요. 모든 Azure Maven 플러그 인은 공통 구성 집합을 공유합니다. 이러한 구성은 일반 구성을 참조 하세요. Azure Spring Apps와 관련된 구성은 Azure Spring Apps: 구성 세부 정보를 참조하세요.

나중에 사용할 수 있도록 값과 appName 값을 따로 clusterName 저장해야 합니다.

배포를 위한 앱 준비

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

  1. 다음 예제와 같이 앱의 src\기본\resources\application.yml 파일로 이동하고 배포된 앱의 do기본 이름으로 값을 post-logout-redirect-uri 변경합니다. 예를 들어 이전 단계에서 Azure Spring Apps 인스턴스 및 ms-identity-spring-boot-webapp 앱 이름에 대해 선택한 cluster-ms-identity-spring-boot-webapp 경우 이제 값에 post-logout-redirect-uri 사용해야 https://cluster-ms-identity-spring-boot-webapp-ms-identity-spring-boot-webapp.azuremicroservices.io 합니다.

    post-logout-redirect-uri: https://<cluster-name>-<app-name>.azuremicroservices.io
    
  2. 이 파일을 저장한 후 다음 명령을 사용하여 앱을 다시 빌드합니다.

    mvn clean package
    

Important

애플리케이션의 application.yml 파일은 현재 매개 변수에 클라이언트 암호 client-secret 의 값을 보유합니다. 이 파일에 이 값을 유지하는 것은 좋지 않습니다. Git 리포지토리에 커밋하는 경우에도 위험을 감수할 수 있습니다.

추가 보안 단계로 이 값을 Azure Key Vault에 저장하고 Key Vault에서 비밀을 로드하여 애플리케이션에서 사용할 수 있도록 할 수 있습니다.

Microsoft Entra ID 앱 등록 업데이트

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

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

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

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

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

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

  6. 앱의 URI를 입력하고 /login/oauth2/code/ 추가합니다(예 https://<cluster-name>-<app-name>.azuremicroservices.io/login/oauth2/code/: .).

  7. 저장을 선택합니다.

앱 배포하기

다음 명령을 사용하여 앱을 배포합니다.

mvn azure-spring-apps:deploy

다음 목록에서는 명령 상호 작용에 대해 설명합니다.

  • OAuth2 로그인: OAuth2 프로토콜에 따라 Azure에 대한 로그인 권한을 부여해야 합니다.

명령이 실행되면 다음 로그 메시지에서 배포가 성공했음을 확인할 수 있습니다.

[INFO] Deployment(default) is successfully created
[INFO] Starting Spring App after deploying artifacts...
[INFO] Deployment Status: Running
[INFO]   InstanceName:demo-default-x-xxxxxxxxxx-xxxxx  Status:Running Reason:null       DiscoverStatus:UNREGISTERED
[INFO]   InstanceName:demo-default-x-xxxxxxxxx-xxxxx  Status:Terminating Reason:null       DiscoverStatus:UNREGISTERED
[INFO] Getting public url of app(demo)...
[INFO] Application url: https://<your-Azure-Spring-Apps-instance-name>-demo.azuremicroservices.io

앱 유효성 검사

배포가 완료되면 출력 애플리케이션 URL을 사용하여 애플리케이션에 액세스합니다. 다음 단계를 수행하여 앱의 로그를 확인해 배포 문제를 조사합니다.

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

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

샘플 탐색

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

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

코드 정보

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

콘텐츠

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

파일/폴더 설명
AppCreationScripts/ Microsoft Entra ID 앱 등록을 자동으로 구성하는 스크립트입니다.
pom.xml 애플리케이션 종속성.
src/기본/resources/templates/ UI용 Thymeleaf 템플릿입니다.
src/기본/resources/application.yml 애플리케이션 및 Microsoft Entra ID 부팅 시작 라이브러리 구성.
src/기본/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 토큰에서 그룹 클레임 처리

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

{
  ...
  "groups": [
    "xyz-id-xyz",
    "xyz-id-xyz",]
  ...
}

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

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

@GetMapping(path = "/admin_only")
@PreAuthorize("hasAuthority('enter-admin-group-id-here')")
public String adminOnly(Model model) {
    // restrict to users who belong to AdminGroup
}
@GetMapping(path = "/regular_user")
@PreAuthorize("hasAnyAuthority('enter-user-group-id-here','enter-admin-group-id-here')")
public String regularUser(Model model) {
    // restrict to users who belong to any of UserGroup or AdminGroup
}

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

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

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

<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 토큰 세부 정보, 관리s Only일반 사용자 페이지를 보호합니다. 앱은 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.
    }
}

그룹 초과분 클레임

토큰 크기가 HTTP 헤더 크기 제한을 초과하지 않도록 하기 위해 Microsoft ID 플랫폼 그룹 클레임에 포함된 개체 ID의 수를 제한합니다.

초과분 제한은 SAML 토큰의 경우 150개, JWT 토큰의 경우 200개, 단일 페이지 애플리케이션의 경우 6개입니다. 사용자가 초과분 제한보다 많은 그룹의 멤버인 경우 Microsoft ID 플랫폼 토큰에서 그룹 클레임의 그룹 ID를 내보내지 않습니다. 대신 사용자의 그룹 멤버 자격을 검색하기 위해 Microsoft Graph API를 쿼리하도록 애플리케이션에 나타내는 토큰에 초과분 클레임이 포함됩니다.

Microsoft Entra ID Boot Starter v3.5 이상에서는 그룹 클레임을 자동으로 구문 분석하고 로그인한 사용자의 Authorities그룹에 각 그룹을 추가합니다. 시작은 그룹 초과 시나리오를 자동으로 처리합니다.

참고 항목

가능한 경우 그룹 필터링 기능을 사용하여 그룹 초과가 발생하지 않도록 하는 것이 좋습니다. 자세한 내용은 사용자가 할당할 수 있는 필터링된 그룹 집합에서 그룹 클레임 값을 받도록 애플리케이션 구성 섹션 을 참조하세요.

테스트를 위한 초과분 시나리오 만들기

AppCreationScripts 폴더에 제공된 BulkCreateGroups.ps1 파일을 사용하여 많은 그룹을 만들고 사용자를 할당할 수 있습니다. 이 파일은 개발 중에 초과분 시나리오를 테스트하는 데 도움이 됩니다. BulkCreateGroups.ps1 스크립트에서 제공된 사용자를 objectId 변경해야 합니다.

초과분 처리에는 로그인한 사용자의 그룹 멤버 자격을 읽기 위해 Microsoft Graph를 호출해야 하므로 앱에 getMemberGroups 함수에 대한 User.Read 및 GroupMember.Read.All 권한이 있어야 합니다.

Important

초과분 시나리오의 경우 클라이언트 및 서비스 앱 모두에 대해 Microsoft Graph API의 GroupMember.Read.All 범위에 대해 부여 Admin Consent 했는지 확인합니다. 자세한 내용은 이 문서의 앞부분에 있는 앱 등록 단계를 참조하세요.

Microsoft Entra ID 앱 등록 업데이트(java-spring-webapp-groups)

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

  1. Azure Portal로 다시 이동합니다.

  2. 탐색 창에서 Azure Active Directory를 선택한 다음, 앱 등록(미리 보기)를 선택합니다.

  3. 결과 화면에서 애플리케이션을 java-spring-webapp-groups 선택합니다.

  4. 앱의 등록 페이지에서 메뉴에서 인증을 선택합니다.

  5. 리디렉션 URI 섹션에서 Azure 배포의 사이트 URL과 일치하도록 회신 URL을 업데이트합니다. 예를 들면 다음과 같습니다https://java-spring-webapp-groups.azurewebsites.net/login/oauth2/code/.

Important

앱이 메모리 내 스토리지를 사용하는 경우 Azure 앱 Services는 비활성 상태인 경우 웹 사이트를 스핀다운하고 앱이 보관하고 있던 모든 레코드가 비워집니다. 또한 웹 사이트의 인스턴스 수를 늘리면 요청이 인스턴스 간에 분산됩니다. 따라서 앱 레코드는 각 인스턴스에서 동일하지 않습니다.

자세한 정보

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