Microsoft Entra 개발자용 Spring Boot Starter 가이드

이 문서는 버전 4.18.0 ✔️ 버전 5.12.0에 적용됩니다. ✔️

이 문서에서는 Microsoft Entra ID용 Spring Boot Starter의 기능 및 핵심 시나리오에 대해 설명합니다. 이 문서에는 일반적인 문제, 해결 방법 및 진단 단계에 대한 지침도 포함되어 있습니다.

웹 애플리케이션을 빌드할 때 ID 및 액세스 관리는 기본 요소입니다. Azure는 나머지 Azure 에코시스템과 긴밀하게 통합된 클라우드 기반 ID 서비스를 제공합니다.

Spring Security를 사용하면 Spring 기반 애플리케이션을 쉽게 보호할 수 있지만 특정 ID 공급자에 맞게 조정되지는 않습니다. Microsoft Entra용 Spring Boot Starter ID를 사용하면 웹 애플리케이션을 Microsoft Entra 테넌트에 연결하고 Microsoft Entra ID로 리소스 서버를 보호할 수 있습니다. Oauth 2.0 프로토콜을 사용하여 웹 애플리케이션 및 리소스 서버를 보호합니다.

다음 링크는 시작 패키지, 설명서 및 샘플에 대한 액세스를 제공합니다.

필수 조건

이 가이드의 지침을 따르려면 다음 필수 구성 요소가 있어야 합니다.

Important

이 문서의 단계를 완료하려면 Spring Boot 버전 2.5 이상이 필요합니다.

핵심 시나리오

이 가이드에서는 다음 시나리오에서 Microsoft Entra Starter를 사용하는 방법을 설명합니다.

웹 애플리케이션은 사용자가 로그인할 수 있도록 하는 웹 기반 애플리케이션입니다. 리소스 서버는 액세스 토큰의 유효성을 검사한 후 액세스를 허용하거나 거부합니다.

웹 애플리케이션에 액세스

이 시나리오에서는 OAuth 2.0 권한 부여 코드 부여 흐름을 사용하여 사용자가 Microsoft 계정으로 로그인할 수 있도록 합니다.

이 시나리오에서 Microsoft Entra Starter를 사용하려면 다음 단계를 사용합니다.

리디렉션 URI를 <application-base-uri>/login/oauth2/code/로 설정합니다. 예: http://localhost:8080/login/oauth2/code/ 후행을 포함해야 합니다 /. 리디렉션 URI에 대한 자세한 내용은 빠른 시작에서 리디렉션 URI 추가: Microsoft ID 플랫폼 애플리케이션 등록을 참조하세요.

샘플 웹앱이 강조 표시된 Microsoft Entra 앱 등록 페이지를 보여 주는 Azure Portal의 스크린샷

리디렉션 URI가 강조 표시된 웹앱 인증 페이지를 보여 주는 Azure Portal의 스크린샷

pom.xml 파일에 다음 종속성을 추가합니다.

<dependency>
   <groupId>com.azure.spring</groupId>
   <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

참고 항목

BOM(청구서)을 사용하여 Spring Cloud Azure 라이브러리 버전을 관리하는 방법에 대한 자세한 내용은 Spring Cloud Azure 개발자 가이드시작 섹션을 참조하세요.

application.yml 파일에 다음 속성을 추가합니다. 필수 구성 요소에 설명된 대로 Azure Portal에서 만든 앱 등록에서 이러한 속성의 값을 가져올 수 있습니다.

spring:
 cloud:
   azure:
     active-directory:
       enabled: true
       profile:
         tenant-id: <tenant>
       credential:
         client-id: <your-client-ID>
         client-secret: <your-client-secret>

참고 항목

tenant-id에 허용되는 값은 common, organizations, consumers 또는 테넌트 ID입니다. 이러한 값에 대한 자세한 내용은 오류 AADSTS50020 - ID 공급자의 사용자 계정이 테넌트에 존재하지 않음잘못된 엔드포인트(개인 및 조직 계정)가 사용됨 섹션을 참조하세요. 단일 테넌트 앱을 변환하는 방법에 대한 자세한 내용은 Microsoft Entra ID에서 단일 테넌트 앱을 다중 테넌트 앱으로 변환을 참조하세요.

기본 보안 구성을 사용하거나 사용자 고유의 구성을 제공합니다.

옵션 1: 기본 구성을 사용합니다.

이 옵션을 사용하면 아무 작업도 수행할 필요가 없습니다. DefaultAadWebSecurityConfigurerAdapter 클래스가 자동으로 구성됩니다.

옵션 2: 자체 정의 구성을 제공합니다.

구성을 제공하려면 다음 예제와 같이 함수에서 configure(HttpSecurity http) 클래스와 호출 super.configure(http) 을 확장 AadWebSecurityConfigurerAdapter 합니다.

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadOAuth2LoginSecurityConfig extends AadWebSecurityConfigurerAdapter {

   /**
    * Add configuration logic as needed.
   */
   @Override
   protected void configure(HttpSecurity http) throws Exception {
       super.configure(http);
       http.authorizeRequests()
           .anyRequest().authenticated();
       // Do some custom configuration.
   }
}

웹 애플리케이션에서 리소스 서버에 액세스

이 시나리오에서 Microsoft Entra Starter를 사용하려면 다음 단계를 사용합니다.

앞에서 설명한 대로 리디렉션 URI를 설정합니다.

pom.xml 파일에 다음 종속성을 추가합니다.

<dependency>
   <groupId>com.azure.spring</groupId>
   <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

참고 항목

BOM(청구서)을 사용하여 Spring Cloud Azure 라이브러리 버전을 관리하는 방법에 대한 자세한 내용은 Spring Cloud Azure 개발자 가이드시작 섹션을 참조하세요.

이전에 설명한 대로 다음 속성을 application.yml 파일에 추가합니다.

spring:
 cloud:
   azure:
     active-directory:
       enabled: true
       profile:
         tenant-id: <tenant>
       credential:
         client-id: <your-client-ID>
         client-secret: <your-client-secret>
       authorization-clients:
         graph:
           scopes: https://graph.microsoft.com/Analytics.Read, email

참고 항목

tenant-id에 허용되는 값은 common, organizations, consumers 또는 테넌트 ID입니다. 이러한 값에 대한 자세한 내용은 오류 AADSTS50020 - ID 공급자의 사용자 계정이 테넌트에 존재하지 않음잘못된 엔드포인트(개인 및 조직 계정)가 사용됨 섹션을 참조하세요. 단일 테넌트 앱을 변환하는 방법에 대한 자세한 내용은 Microsoft Entra ID에서 단일 테넌트 앱을 다중 테넌트 앱으로 변환을 참조하세요.

graph 다음은 사용자의 OAuth2AuthorizedClient이름이며 scopes 로그인할 때 동의에 필요한 범위입니다.

다음 예와 유사한 코드를 애플리케이션에 추가합니다.

@GetMapping("/graph")
@ResponseBody
public String graph(
   @RegisteredOAuth2AuthorizedClient("graph") OAuth2AuthorizedClient graphClient
) {
   // toJsonString() is just a demo.
   // oAuth2AuthorizedClient contains access_token. We can use this access_token to access the resource server.
   return toJsonString(graphClient);
}

여기서 graph는 이전 단계에서 구성된 클라이언트 ID입니다. OAuth2AuthorizedClient 에는 리소스 서버에 액세스하는 데 사용되는 액세스 토큰이 포함되어 있습니다.

이 시나리오를 보여주는 전체 샘플은 spring-cloud-azure-starter-active-directory 샘플: aad-web-application을 참조하세요.

리소스 서버/API 보호

이 시나리오는 로그인을 지원하지 않지만 액세스 토큰의 유효성을 검사하여 서버를 보호합니다. 액세스 토큰이 유효한 경우 서버는 요청을 제공합니다.

이 시나리오에서 Microsoft Entra Starter를 사용하려면 다음 단계를 사용합니다.

pom.xml 파일에 다음 종속성을 추가합니다.

<dependency>
   <groupId>com.azure.spring</groupId>
   <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>

참고 항목

BOM(청구서)을 사용하여 Spring Cloud Azure 라이브러리 버전을 관리하는 방법에 대한 자세한 내용은 Spring Cloud Azure 개발자 가이드시작 섹션을 참조하세요.

이전에 설명한 대로 다음 속성을 application.yml 파일에 추가합니다.

spring:
 cloud:
   azure:
     active-directory:
       enabled: true
       credential:
         client-id: <your-client-ID>
       app-id-uri: <your-app-ID-URI>

your-client-ID> 및< your-app-ID-URI> 값을 모두 <사용하여 액세스 토큰을 확인할 수 있습니다. 다음 이미지와 <같이 Azure Portal에서 앱 ID-URI> 값을 가져올 수 있습니다.

sample-resource-server가 강조 표시된 Microsoft Entra 앱 등록 페이지를 보여 주는 Azure Portal의 스크린샷.

애플리케이션 ID URI가 강조 표시된 API 페이지 노출 웹앱을 보여 주는 Azure Portal의 스크린샷

기본 보안 구성을 사용하거나 사용자 고유의 구성을 제공합니다.

옵션 1: 기본 구성을 사용합니다.

이 옵션을 사용하면 아무 것도 필요하지 않습니다. DefaultAadResourceServerWebSecurityConfigurerAdapter 클래스가 자동으로 구성됩니다.

옵션 2: 자체 정의 구성을 제공합니다.

구성을 제공하려면 다음 예제와 같이 함수에서 configure(HttpSecurity http) 클래스와 호출 super.configure(http) 을 확장 AadResourceServerWebSecurityConfigurerAdapter 합니다.

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadOAuth2ResourceServerSecurityConfig extends AadResourceServerWebSecurityConfigurerAdapter {

   /**
    * Add configuration logic as needed.
    */
   @Override
   protected void configure(HttpSecurity http) throws Exception {
       super.configure(http);
       http.authorizeRequests((requests) -> requests.anyRequest().authenticated());
   }
}

이 시나리오를 보여주는 전체 샘플은 spring-cloud-azure-starter-active-directory 샘플: aad-resource-server를 참조하세요.

리소스 서버에서 다른 리소스 서버에 액세스

이 시나리오는 다른 리소스 서버를 방문하는 리소스 서버를 지원합니다.

이 시나리오에서 Microsoft Entra Starter를 사용하려면 다음 단계를 사용합니다.

pom.xml 파일에 다음 종속성을 추가합니다.

<dependency>
   <groupId>com.azure.spring</groupId>
   <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

참고 항목

BOM(청구서)을 사용하여 Spring Cloud Azure 라이브러리 버전을 관리하는 방법에 대한 자세한 내용은 Spring Cloud Azure 개발자 가이드시작 섹션을 참조하세요.

application.yml 파일에 다음 속성을 추가합니다.

spring:
 cloud:
   azure:
     active-directory:
       enabled: true
       profile:
         tenant-id: <tenant>
       credential:
         client-id: <web-API-A-client-ID>
         client-secret: <web-API-A-client-secret>
       app-id-uri: <web-API-A-app-ID-URI>
       authorization-clients:
         graph:
           scopes:
              - https://graph.microsoft.com/User.Read

참고 항목

tenant-id에 허용되는 값은 common, organizations, consumers 또는 테넌트 ID입니다. 이러한 값에 대한 자세한 내용은 오류 AADSTS50020 - ID 공급자의 사용자 계정이 테넌트에 존재하지 않음잘못된 엔드포인트(개인 및 조직 계정)가 사용됨 섹션을 참조하세요. 단일 테넌트 앱을 변환하는 방법에 대한 자세한 내용은 Microsoft Entra ID에서 단일 테넌트 앱을 다중 테넌트 앱으로 변환을 참조하세요.

다음 예제와 같이 코드의 @RegisteredOAuth2AuthorizedClient 특성을 사용하여 관련 리소스 서버에 액세스합니다.

@PreAuthorize("hasAuthority('SCOPE_Obo.Graph.Read')")
@GetMapping("call-graph")
public String callGraph(@RegisteredOAuth2AuthorizedClient("graph") OAuth2AuthorizedClient graph) {
   return callMicrosoftGraphMeEndpoint(graph);
}

이 시나리오를 보여주는 전체 샘플은 spring-cloud-azure-starter-active-directory 샘플: aad-resource-server-obo를 참조하세요.

하나의 애플리케이션에서 웹 애플리케이션 및 리소스 서버

이 시나리오에서는 웹 애플리케이션에 액세스하고 한 애플리케이션에서 리소스 서버/API를 보호합니다.

이 시나리오에서 사용 aad-starter 하려면 다음 단계를 수행합니다.

pom.xml 파일에 다음 종속성을 추가합니다.

<dependency>
   <groupId>com.azure.spring</groupId>
   <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>

참고 항목

BOM(청구서)을 사용하여 Spring Cloud Azure 라이브러리 버전을 관리하는 방법에 대한 자세한 내용은 Spring Cloud Azure 개발자 가이드시작 섹션을 참조하세요.

application.yml 파일을 업데이트합니다. 다음 예제와 같이 속성을 spring.cloud.azure.active-directory.application-typeweb_application_and_resource_server로 설정하고 각 권한 부여 클라이언트에 대한 권한 부여 유형을 지정합니다.

spring:
 cloud:
   azure:
     active-directory:
       enabled: true
       profile:
         tenant-id: <tenant>
       credential:
         client-id: <Web-API-C-client-id>
         client-secret: <Web-API-C-client-secret>
       app-id-uri: <Web-API-C-app-id-url>
       application-type: web_application_and_resource_server  # This is required.
       authorization-clients:
         graph:
           authorizationGrantType: authorization_code  # This is required.
           scopes:
             - https://graph.microsoft.com/User.Read
             - https://graph.microsoft.com/Directory.Read.All

참고 항목

tenant-id에 허용되는 값은 common, organizations, consumers 또는 테넌트 ID입니다. 이러한 값에 대한 자세한 내용은 오류 AADSTS50020 - ID 공급자의 사용자 계정이 테넌트에 존재하지 않음잘못된 엔드포인트(개인 및 조직 계정)가 사용됨 섹션을 참조하세요. 단일 테넌트 앱을 변환하는 방법에 대한 자세한 내용은 Microsoft Entra ID에서 단일 테넌트 앱을 다중 테넌트 앱으로 변환을 참조하세요.

Java 코드를 작성하여 여러 HttpSecurity 인스턴스를 구성합니다.

다음 예제 코드 AadWebApplicationAndResourceServerConfig 에는 리소스 서버용과 웹 애플리케이션용으로 구성된 두 가지 보안 구성이 포함되어 있습니다. 클래스에는 ApiWebSecurityConfigurationAdapter 리소스 서버 보안 어댑터를 구성하는 데 높은 우선 순위가 있습니다. HtmlWebSecurityConfigurerAdapter 클래스는 웹 애플리케이션 보안 어댑터를 구성하기 위해 낮은 우선 순위를 갖습니다.

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadWebApplicationAndResourceServerConfig {

   @Order(1)
   @Configuration
   public static class ApiWebSecurityConfigurationAdapter extends AadResourceServerWebSecurityConfigurerAdapter {
       protected void configure(HttpSecurity http) throws Exception {
           super.configure(http);
           // All the paths that match `/api/**`(configurable) work as the esource server. Other paths work as  the web application.
           http.antMatcher("/api/**")
               .authorizeRequests().anyRequest().authenticated();
       }
   }

   @Configuration
   public static class HtmlWebSecurityConfigurerAdapter extends AadWebSecurityConfigurerAdapter {

       @Override
       protected void configure(HttpSecurity http) throws Exception {
           super.configure(http);
           // @formatter:off
           http.authorizeRequests()
                   .antMatchers("/login").permitAll()
                   .anyRequest().authenticated();
           // @formatter:on
       }
   }
}

응용 프로그램 유형

spring.cloud.azure.active-directory.application-type 속성은 종속성을 통해 해당 값을 유추할 수 있으므로 선택 사항입니다. 값을 사용하는 web_application_and_resource_server 경우에만 속성을 수동으로 설정해야 합니다.

종속성 있음: spring-security-oauth2-client 종속성: spring-security-oauth2-resource-server 애플리케이션 종류의 유효한 값 기본값
없음 web_application web_application
아니요 resource_server resource_server
web_application,resource_server,
resource_server_with_obo, web_application_and_resource_server
resource_server_with_obo

구성 가능한 속성

Microsoft Entra ID용 Spring Boot Starter는 다음 속성을 제공합니다.

속성 설명
spring.cloud.azure.active-directory.app-id-uri 리소스 서버에서 액세스 토큰의 대상 그룹의 유효성을 검사하는 데 사용됩니다. 액세스 토큰은 대상 사용자가 이전에 설명한 your-client-ID> 또는 <your-app-ID-URI> 값과 동일한 경우에만 유효합니다.<
spring.cloud.azure.active-directory.authorization-clients 애플리케이션이 방문할 리소스 API를 구성하는 맵입니다. 각 항목은 애플리케이션이 방문할 하나의 리소스 API에 해당합니다. Spring 코드에서 각 항목은 하나의 OAuth2AuthorizedClient 개체에 해당합니다.
spring.cloud.azure.active-directory.authorization-clients.<your-client-name.scopes> 애플리케이션이 획득할 리소스 서버의 API 권한입니다.
spring.cloud.azure.active-directory.authorization-clients.<your-client-name.authorization-grant-type> 권한 부여 클라이언트의 유형입니다. 지원되는 형식은 authorization_code (웹앱의 기본 형식), on_behalf_of (리소스 서버의 기본 형식), client_credentials.
spring.cloud.azure.active-directory.application-type 애플리케이션 유형을 참조하세요.
spring.cloud.azure.active-directory.profile.environment.active-directory-endpoint 권한 부여 서버의 기본 URI입니다. 기본값은 https://login.microsoftonline.com/입니다.
spring.cloud.azure.active-directory.credential.client-id Microsoft Entra ID에 등록된 애플리케이션 ID입니다.
spring.cloud.azure.active-directory.credential.client-secret 등록된 애플리케이션의 클라이언트 암호입니다.
spring.cloud.azure.active-directory.user-group.use-transitive-members true로 설정된 경우 그룹을 가져오는 데 사용합니다v1.0/me/transitiveMemberOf. 그렇지 않으면 /v1.0/me/memberOf를 사용합니다.
spring.cloud.azure.active-directory.post-logout-redirect-uri 로그아웃 게시를 위한 리디렉션 URI입니다.
spring.cloud.azure.active-directory.profile.tenant-id Azure 테넌트 ID입니다. tenant-id에 허용되는 값은 common, organizations, consumers 또는 테넌트 ID입니다.
spring.cloud.azure.active-directory.user-group.allowed-group-names Graph API 호출의 응답에서 MemberOf 발견된 경우 권한이 부여될 것으로 예상되는 사용자 그룹입니다.
spring.cloud.azure.active-directory.user-name-attribute 보안 주체의 이름이 될 클레임을 나타냅니다.

다음 예제에서는 이러한 속성을 사용하는 방법을 보여 줍니다.

속성 예제 1: Azure Global 대신 Azure China 21Vianet을 사용하려면 다음 단계를 사용합니다.

  • application.yml 파일에 다음 속성을 추가합니다.

    spring:
       cloud:
         azure:
           active-directory:
             enabled: true
             profile:
               environment:
                 active-directory-endpoint: https://login.partner.microsoftonline.cn
    

이 방법을 사용하면 Azure 퍼블릭 클라우드 대신 Azure 소버린 클라우드 또는 국가별 클라우드를 사용할 수 있습니다.

속성 예제 2: 그룹 이름을 사용하여 웹 애플리케이션에서 일부 메서드를 보호하려면 다음 단계를 사용합니다.

application.yml 파일에 다음 속성을 추가합니다.

spring:
 cloud:
   azure:
     active-directory:
       enabled: true
       user-group:
         allowed-groups: group1, group2

기본 보안 구성을 사용하거나 사용자 고유의 구성을 제공합니다.

옵션 1: 기본 구성을 사용합니다. 이 옵션을 사용하면 아무 작업도 수행할 필요가 없습니다. DefaultAadWebSecurityConfigurerAdapter 클래스가 자동으로 구성됩니다.

옵션 2: 자체 정의 구성을 제공합니다. 구성을 제공하려면 다음 예제와 같이 함수에서 configure(HttpSecurity http) 클래스와 호출 super.configure(http) 을 확장 AadWebSecurityConfigurerAdapter 합니다.

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AadOAuth2LoginSecurityConfig extends AadWebSecurityConfigurerAdapter {

   /**
    * Add configuration logic as needed.
    */
   @Override
   protected void configure(HttpSecurity http) throws Exception {
       super.configure(http);
       http.authorizeRequests()
           .anyRequest().authenticated();
       // Do some custom configuration.
   }
}

다음 예제와 @PreAuthorize 같이 주석을 사용하여 메서드를 보호합니다.

@Controller
public class RoleController {
   @GetMapping("group1")
   @ResponseBody
   @PreAuthorize("hasRole('ROLE_group1')")
   public String group1() {
       return "group1 message";
   }

   @GetMapping("group2")
   @ResponseBody
   @PreAuthorize("hasRole('ROLE_group2')")
   public String group2() {
       return "group2 message";
   }

   @GetMapping("group1Id")
   @ResponseBody
   @PreAuthorize("hasRole('ROLE_<group1-id>')")
   public String group1Id() {
       return "group1Id message";
   }

   @GetMapping("group2Id")
   @ResponseBody
   @PreAuthorize("hasRole('ROLE_<group2-id>')")
   public String group2Id() {
       return "group2Id message";
   }
}

속성 예제 3: 리소스 서버를 방문하는 리소스 서버에서 클라이언트 자격 증명 흐름을 사용하도록 설정하려면 다음 단계를 사용합니다.

application.yml 파일에 다음 속성을 추가합니다.

spring:
 cloud:
   azure:
     active-directory:
       enabled: true
       authorization-clients:
         webapiC:   # When authorization-grant-type is null, on behalf of flow is used by default
           authorization-grant-type: client_credentials
           scopes:
             - <Web-API-C-app-id-url>/.default

다음 예와 유사한 코드를 애플리케이션에 추가합니다.

@PreAuthorize("hasAuthority('SCOPE_Obo.WebApiA.ExampleScope')")
@GetMapping("webapiA/webapiC")
public String callClientCredential() {
   String body = webClient
       .get()
       .uri(CUSTOM_LOCAL_READ_ENDPOINT)
       .attributes(clientRegistrationId("webapiC"))
       .retrieve()
       .bodyToMono(String.class)
       .block();
   LOGGER.info("Response from Client Credential: {}", body);
   return "client Credential response " + (null != body ? "success." : "failed.");
}

고급 기능

웹 애플리케이션에서 ID 토큰으로 액세스 제어 지원

시작은 웹 애플리케이션에서 권한 부여를 위해 ID 토큰을 사용할 수 있도록 ID 토큰의 roles 클레임에서 만들기 GrantedAuthority 를 지원합니다. Microsoft Entra ID의 appRoles 기능을 사용하여 클레임을 만들고 액세스 제어를 roles 구현할 수 있습니다.

참고 항목

appRoles에서 생성된 roles 클레임은 APPROLE_ 접두사로 데코레이팅됩니다.

클레임으로 roles 사용하는 appRoles 경우 그룹 특성을 roles 동시에 구성하지 마십시오. 그렇지 않으면 그룹 특성이 대신 그룹 정보를 포함하도록 클레임을 재정의합니다 appRoles. 매니페스트에서 다음 구성을 사용하지 않아야 합니다.

"optionalClaims": {
    "idtoken": [{
        "name": "groups",
        "additionalProperties": ["emit_as_roles"]
    }]
}

웹 애플리케이션에서 ID 토큰으로 액세스 제어를 지원하려면 다음 단계를 수행합니다.

애플리케이션에 앱 역할을 추가하고 사용자 또는 그룹에 할당합니다. 자세한 내용은 방법: 애플리케이션에 앱 역할 추가 및 토큰에서 수신을 참조하세요.

애플리케이션의 매니페스트에 다음 구성을 추가합니다.appRoles

 "appRoles": [
   {
     "allowedMemberTypes": [
       "User"
     ],
     "displayName": "Admin",
     "id": "2fa848d0-8054-4e11-8c73-7af5f1171001",
     "isEnabled": true,
     "description": "Full admin access",
     "value": "Admin"
    }
 ]

다음 예와 유사한 코드를 애플리케이션에 추가합니다.

@GetMapping("Admin")
@ResponseBody
@PreAuthorize("hasAuthority('APPROLE_Admin')")
public String Admin() {
   return "Admin message";
}

문제 해결

클라이언트 로깅 사용

Java용 Azure SDK는 애플리케이션 오류를 해결하고 해결하는 데 도움이 되는 일관된 로깅 스토리를 제공합니다. 생성된 로그는 터미널에 도달하기 전에 애플리케이션의 흐름을 캡처하여 근본 문제를 찾는 데 도움이 됩니다. 로깅을 사용하도록 설정하는 방법에 대한 지침은 로깅 위키를 참조하세요.

Spring 로깅 사용

Spring을 사용하면 지원되는 모든 로깅 시스템이 TRACE, DEBUG, INFO, WARN, ERROR, FATAL 또는 OFF 중 하나인 위치를 사용하여 logging.level.<logger-name>=<level> Spring 환경(예: application.properties)에서 로거 수준을 설정할 수 있습니다. 를 사용하여 logging.level.root루트 로거를 구성할 수 있습니다.

다음 예는 application.properties 파일의 잠재적 로깅 설정을 보여줍니다.

logging.level.root=WARN
logging.level.org.springframework.web=DEBUG
logging.level.org.hibernate=ERROR

Spring의 로깅 구성에 대한 자세한 내용은 Spring 설명서의 로깅을 참조하세요.

다음 단계

Spring과 Azure에 대한 자세한 사항은 Azure의 Spring 설명서 센터를 참조합니다.