다음을 통해 공유


토큰에서 그룹 클레임 및 앱 역할 구성

이 문서에서는 앱 역할 정의를 사용하여 앱을 구성하고 앱 역할에 보안 그룹을 할당하여 최소한의 권한으로 애플리케이션 보안을 강화하면서 유연성과 제어를 향상시킬 수 있습니다.

Microsoft Entra ID는 사용자의 할당된 보안 그룹, Microsoft Entra 디렉터리 역할 및 배포 그룹을 토큰의 클레임으로 보내는 것을 지원합니다. 이 방법을 사용하여 앱에서 권한 부여를 추진할 수 있습니다. 그러나 Microsoft Entra ID는 토큰 크기별로 토큰의 그룹 지원을 제한합니다. 사용자가 너무 많은 그룹의 멤버인 경우 토큰에 그룹이 없습니다.

이 문서에서는 Microsoft Entra 그룹 지원을 사용하여 토큰에서 사용자 정보를 가져오는 다른 방법을 알아봅니다. 대신 앱 역할 정의를 사용하여 앱을 구성하고 앱 역할에 그룹을 할당합니다. 이 제로 트러스트 개발자 모범 사례는 최소한의 권한으로 애플리케이션 보안을 강화하면서 유연성과 제어를 향상시킵니다.

권한 부여를 위해 애플리케이션 내에서 사용할 수 있는 토큰에서 그룹 클레임 을 구성할 수 있습니다. 토큰의 그룹 정보는 토큰을 받을 때만 최신입니다. 그룹 클레임은 두 가지 기본 패턴을 지원합니다.

  • Microsoft Entra OID(개체 식별자) 특성으로 식별되는 그룹입니다.
  • Active Directory 동기화된 sAMAccountName 그룹 및 사용자의 특성으로 GroupSID 식별되는 그룹입니다.

그룹 멤버 자격은 권한 부여 결정을 내릴 수 있습니다. 예를 들어 다음 예제에서는 토큰의 일부 클레임을 보여줍니다. ID 또는 액세스 토큰에 그룹 클레임 및 역할을 추가할 수 있습니다.

"aud": "e18c04b1-4868-4b93-93d1-8d71f17ab99b", 
"iss": "https://login.microsoftonline.com/833ced3d-cb2e-41de-92f1-29e2af035ddc/v2.0", 
"iat": 1669657224, "nbf": 1669657224, "exp": 1669661124, 
"groups": [ 
   "0760b6cf-170e-4a14-91b3-4b78e0739963", 
   "3b2b0c93-acd8-4208-8eba-7a48db1cd4c0" 
 ],
"oid": "cb7eda1b-d09a-40ae-b8bb-37836ebc6abd",
"sub": "3OBtLXUC2ZrN_ADLNjW9X4o0lcd61py7lgHw3Skh77s",
"tid": "833ced3d-cb2e-41ce-92f1-29e2af035ddc", 
"ver": "2.0", 
"wids": [ 
   "cf1c38e5-3621-4004-a7cb-879624dced7c", 
   "b79fbf4d-3ef9-4689-8143-76b194e85509" 
 ]

클레임 배열은 groups 이 사용자가 멤버인 그룹의 ID로 구성됩니다. 배열은 이 wids 사용자에게 할당된 Microsoft Entra 역할의 ID로 구성됩니다. 여기서는 cf1c38e5-3621-4004-a7cb-879624dced7c 이 사용자의 할당된 역할에 애플리케이션 개발자 및 표준 멤버가 표시됨을 3b2b0c93-acd8-4208-8eba-7a48db1cd4c0 보여 줍니다.

앱은 이러한 클레임 및 해당 값의 존재 여부 또는 부재에 따라 권한 부여 결정을 내릴 수 있습니다. 클레임에 대한 wids 값 목록은 Microsoft Entra 기본 제공 역할을 참조하세요.

토큰에 groups 클레임 및 wids 클레임을 추가하려면 앱 등록 | 토큰 구성 | 선택적 클레임 | 그룹 클레임 편집 화면의 다음 예제와 같이 모든 그룹을 선택합니다.

그룹 클레임 편집 화면의 스크린샷은 선택한 그룹 유형( 애플리케이션에 할당된 그룹)을 보여줍니다.

그룹 초과분

위의 예제와 같이 토큰의 모든 그룹을 요청하는 경우 토큰에 클레임이 있는 groups 토큰을 사용할 수 없습니다. 토큰 및 groups 클레임에 대한 크기 제한이 있으므로 너무 커지지 않습니다. 사용자가 너무 많은 그룹의 구성원인 경우 앱은 Microsoft Graph에서 사용자의 그룹 멤버 자격을 가져와야 합니다. 클레임의 그룹에 groups 대한 제한은 다음과 같습니다.

  • JWT(JSON 웹 토큰)용 그룹 200개
  • SAML(Security Assertion Markup Language) 토큰에 대한 150개 그룹입니다.
  • 암시적 흐름을 사용할 때 6개의 그룹(예: 하이브리드 흐름의 암시적 흐름 부분을 통해 ID 토큰을 가져오는 ASP.NET 코어 사용).
    • 단일 페이지 웹앱에는 암시적 흐름이 더 이상 권장되지 않습니다.
    • 암시적 흐름은 OAuth2 하이브리드 흐름에서 액세스 토큰이 아니라 ID 토큰에 대해서만 웹앱에서 사용할 수 있습니다.

OpenID 커넥트 또는 OAuth2를 사용하는 경우 토큰에 최대 200개의 그룹을 가질 수 있습니다. SAML을 사용하는 경우 SAML 토큰이 OAuth2 및 OpenID 커넥트 토큰보다 크므로 150개의 그룹만 가질 수 있습니다. 암시적 흐름을 사용하는 경우 해당 응답이 URL에 표시되므로 제한은 6입니다. 이러한 모든 경우에서 클레임이 있는 groups 대신 사용자가 토큰에 맞지 않는 너무 많은 그룹의 구성원임을 나타내는 표시(그룹 초과분이라고 함)가 표시됩니다.

다음 토큰 예제에서는 OpenID 연결 또는 OAuth2, JWT(JSON 웹 토큰)의 경우 사용자가 너무 많은 그룹의 멤버인 경우 클레임이 없습니다 groups . 대신 배열의 멤버를 _claim_names 포함하는 groups 클레임이 있습니다.

예제 토큰의 스크린샷은 쿼리를 보여줍니다.

위의 토큰 예제에서는 클레임이 groups 매핑되어야 하는 것을 볼 수 있습니다 src1. 이론적으로 클레임을 찾은 _claim_sources 다음 멤버를 찾습니다 src1 . 여기에서 그룹 멤버 자격을 가져오는 데 사용할 Graph 쿼리를 찾을 수 있습니다. 그러나 예제 그래프 쿼리에 표시되는 내용에 문제가 있습니다. Microsoft가 더 이상 사용하지 않는 Azure AD Graph로 이동하므로 사용하지 마세요.

암시적 흐름 초과 표시는 클레임 대신 클레임으로 hasgroups groups 수행됩니다.

그룹 멤버 자격을 사용하여 적절한 권한 부여를 보장하려면 앱이 클레임에 대해 groups 검사. 있는 경우 해당 클레임을 사용하여 사용자의 그룹 멤버 자격을 확인합니다. 클레임이 없는 groups 경우 배열의 멤버가 있는 hasgroups 클레임 또는 _claim_names 클레임 groups 이 있는지 검사. 이러한 클레임 중 하나가 있는 경우 사용자는 토큰에 대해 너무 많은 그룹의 구성원입니다. 이 경우 앱은 Microsoft Graph를 사용하여 사용자의 그룹 멤버 자격을 결정해야 합니다. 사용자가 멤버인 직접 및 전이적 그룹을 모두 찾으려면 사용자의 멤버 자격 목록(직접 및 전이적)을 참조하세요.

애플리케이션에 실시간 그룹 멤버 자격 정보가 필요한 경우 Microsoft Graph를 사용하여 그룹 멤버 자격을 확인합니다. 받은 토큰의 정보는 토큰을 획득할 때만 최신 상태임을 기억하세요.

앱 등록 | 토큰 구성 | 선택적 클레임 | 그룹 클레임 편집 화면의 다음 예제를 참조하세요. 그룹 초과분 클레임이 발생하지 않도록 하는 한 가지 방법은 모든 그룹 대신 그룹 클레임 편집 화면에서 애플리케이션할당된 그룹을 선택하는 것입니다.

그룹 클레임 편집 화면의 스크린샷은 선택한 그룹 유형(보안 그룹, 디렉터리 역할 및 모든 그룹)을 보여줍니다.

애플리케이션에 할당된 그룹을 선택하면 다음 조건이 충족되면 그룹이 클레임에 포함 groups 됩니다.

  • 그룹이 엔터프라이즈 앱에 할당됨
  • 사용자가 그룹의 직접 구성원입니다.

이 문서의 게시 를 기준으로 애플리케이션 옵션에 할당된 그룹은 간접 멤버 자격을 지원하지 않습니다. 그룹 할당에는 P1 수준 라이선스 이상이 필요합니다. 무료 테넌트는 애플리케이션에 그룹을 할당할 수 없습니다.

그룹 및 앱 역할

그룹 초과 문제를 방지하는 또 다른 방법은 앱이 사용자 및 그룹을 멤버 유형으로 허용하는 앱 역할을 정의하는 것입니다. 앱 등록 | 앱 역할 만들기 앱 역할 | 화면의 다음 예제와 같이 허용된 멤버 유형에 대한 사용자/그룹을 선택합니다.

앱 역할 만들기 화면의 스크린샷은 허용되는 멤버 유형인 사용자/그룹을 보여줍니다.

앱 등록에서 앱 역할을 만든 IT 전문가는 사용자 및 그룹을 역할에 할당할 수 있습니다. 앱은 다음 토큰 예제와 같이 로그인한 사용자의 할당된 역할이 모두 포함된 토큰(앱의 ID 토큰, API에 대한 액세스 토큰)에서 클레임을 가져옵니다 roles .

"aud": "acaf6ce9-81f0-462a-a93d-a314070738d3",
"iss": "https://login.microsoftonline.com/833ced3d-cb2e-41de-92f1-29e2af035ddc/v2.0",
"iat": 1670826509, "nbf": 1670826509, "exp": 1670830409,
"name": "Kyle Marsh",
"oid": "cb7eda1b-d09a-419e-b8bb-37836ebc6abd",
"preferred_username": "kylemar@idfordevs.dev",
"roles": [
 "Approver",
 "Reviewer" 
],
"sub": "dx-4lf-0loB3c3uVrULnZ2VTLuRRWYff0q7-QlIfYU4",
"tid": "833ced3d-cb3e-41de-92f1-29e2af035ddc",

애플리케이션에서 다음 조건을 처리해야 합니다.

  • 클레임이 없음 roles
  • 사용자에게 역할 할당이 없습니다.
  • 사용자에게 둘 이상의 역할 할당이 roles 있는 경우 클레임의 여러 값

사용자 및 그룹을 멤버로 허용하는 앱 역할을 만드는 경우 항상 승격된 권한 부여 역할 없이 기본 사용자 역할을 정의합니다. 엔터프라이즈 앱 구성에 할당이 필요한 경우 애플리케이션에 직접 할당된 사용자 또는 앱에 할당된 그룹의 멤버 자격이 있는 사용자만 앱을 사용할 수 있습니다.

앱에 사용자 및 그룹을 멤버로 허용하는 앱 역할이 정의된 경우 사용자 또는 그룹이 앱에 할당되면 정의된 앱 역할 중 하나가 앱에 대한 사용자 또는 그룹 할당의 일부여야 합니다. 앱에 대해 관리자 권한 역할만 정의한 경우(예: admin) 모든 사용자 및 그룹에 관리자 역할이 할당됩니다. 기본 역할(예: user)을 정의할 때 앱에 할당된 사용자 및 그룹은 기본 사용자 역할을 할당할 수 있습니다.

그룹 초과 클레임을 방지하는 것 외에도 역할 사용의 또 다른 이점은 그룹 ID 또는 이름과 이것이 애플리케이션에서 의미하는 바를 매핑할 필요가 없다는 것입니다. 예를 들어 코드는 클레임의 그룹을 groups 반복하고 관리자 기능을 허용해야 하는 그룹 ID를 결정하는 대신 관리자 역할 클레임을 찾을 수 있습니다.

코드에서 역할 확인 및 사용

앱에 대한 앱 역할을 정의할 때 해당 역할에 대한 권한 부여 논리를 구현하는 것은 사용자의 책임입니다. 앱에서 권한 부여 논리를 구현하는 방법을 알아보려면 애플리케이션에서 역할 기반 액세스 제어 구현을 참조하세요.

다음 단계

  • 토큰 사용자 지정은 Microsoft Entra 토큰에서 받을 수 있는 정보를 설명합니다. 최소 권한으로 애플리케이션 제로 트러스트 보안을 강화하면서 유연성과 제어를 향상시키기 위해 토큰을 사용자 지정하는 방법을 설명합니다.
  • Microsoft Entra ID 를 사용하여 애플리케이션에 대한 그룹 클레임을 구성하면 Microsoft Entra ID가 애플리케이션 내에서 사용할 토큰에 사용자의 그룹 멤버 자격 정보를 제공하는 방법을 보여 줍니다.
  • 애플리케이션 속성 에 대한 보안 모범 사례는 리디렉션 URI, 액세스 토큰(암시적 흐름에 사용), 인증서 및 비밀, 애플리케이션 ID URI 및 애플리케이션 소유권을 설명합니다.
  • Microsoft ID 플랫폼 범위, 권한 및 동의는 보다 안전하고 신뢰할 수 있는 애플리케이션을 빌드하는 데 도움이 되는 액세스 및 권한 부여의 기본 개념을 설명합니다.
  • 애플리케이션 개발 수명 주기에서 제로 트러스트 ID 및 액세스 관리 개발 모범 사례를 사용하여 보안 애플리케이션을 만듭니다.