다음을 통해 공유


Azure Active Directory B2C의 토큰 개요

중요합니다

2025년 5월 1일부터 새 고객을 위해 Azure AD B2C를 더 이상 구매할 수 없습니다. FAQ에서 자세히 알아보세요.

Azure AD B2C(Azure Active Directory B2C)는 각 인증 흐름을 처리할 때 다양한 유형의 보안 토큰을 내보낸다. 이 문서에서는 각 토큰 형식의 형식, 보안 특성 및 내용을 설명합니다.

토큰 형식

Azure AD B2C는 인증 및 리소스에 대한 보안 액세스를 위해 토큰을 사용하는 OAuth 2.0 및 OpenID Connect 프로토콜을 지원합니다. Azure AD B2C에서 사용되는 모든 토큰은 전달자 및 토큰의 주체에 대한 정보의 어설션을 포함하는 JWT(JSON 웹 토큰) 입니다.

다음 토큰은 Azure AD B2C와의 통신에 사용됩니다.

  • ID 토큰 - 애플리케이션에서 사용자를 식별하는 데 사용할 수 있는 클레임이 포함된 JWT입니다. 이 토큰은 동일한 애플리케이션 또는 서비스의 두 구성 요소 간의 통신을 위해 HTTP 요청으로 안전하게 전송됩니다. ID 토큰의 클레임을 필요에 따라 자유롭게 사용할 수 있습니다. 일반적으로 계정 정보를 표시하거나 애플리케이션에서 액세스 제어 결정을 내리는 데 사용됩니다. Azure AD B2C에서 발급한 ID 토큰은 서명되었지만 암호화되지는 않습니다. 애플리케이션 또는 API가 ID 토큰을 받으면 서명의 유효성을 검사하여 토큰이 인증됨을 증명해야 합니다. 또한 애플리케이션 또는 API는 토큰의 몇 가지 클레임의 유효성을 검사하여 유효한지 증명해야 합니다. 시나리오 요구 사항에 따라 애플리케이션에서 유효성을 검사하는 클레임은 다를 수 있지만 애플리케이션은 모든 시나리오에서 몇 가지 일반적인 클레임 유효성 검사를 수행해야 합니다.

  • 액세스 토큰 - API에 부여된 권한을 식별하는 데 사용할 수 있는 클레임이 포함된 JWT입니다. 액세스 토큰은 서명되었지만 암호화되지 않습니다. 액세스 토큰은 API 및 리소스 서버에 대한 액세스를 제공하는 데 사용됩니다. API가 액세스 토큰을 받으면 서명의 유효성을 검사하여 토큰이 인증됨을 증명해야 합니다. 또한 API는 토큰의 몇 가지 클레임의 유효성을 검사하여 유효한지 증명해야 합니다. 시나리오 요구 사항에 따라 애플리케이션에서 유효성을 검사하는 클레임은 다를 수 있지만 애플리케이션은 모든 시나리오에서 몇 가지 일반적인 클레임 유효성 검사를 수행해야 합니다.

  • 새로 고침 토큰 - 새로 고침 토큰은 OAuth 2.0 흐름에서 새 ID 토큰 및 액세스 토큰을 획득하는 데 사용됩니다. 사용자와 상호작용할 필요 없이, 애플리케이션이 사용자들을 대신하여 리소스에 대한 장기적인 접근을 제공받습니다. 새로 고침 토큰은 애플리케이션에 불투명합니다. Azure AD B2C에서 발급되며 Azure AD B2C에서만 검사하고 해석할 수 있습니다. 수명이 길지만 새로 고침 토큰이 특정 기간 동안 지속될 것으로 예상하여 애플리케이션을 작성해서는 안 됩니다. 다양한 이유로 언제든지 새로 고침 토큰을 무효화할 수 있습니다. 애플리케이션에서 새로 고침 토큰이 유효한지 알 수 있는 유일한 방법은 Azure AD B2C에 토큰 요청을 만들어 사용하려고 시도하는 것입니다. 새 토큰에 대해 새로 고침 토큰을 사용하는 경우 토큰 응답에서 새 새로 고침 토큰을 받게 됩니다. 새 새로 고침 토큰을 저장합니다. 이전에 요청에서 사용한 새로 고침 토큰을 바꿉니다. 이 작업은 새로 고침 토큰이 가능한 한 오랫동안 유효하도록 보장하는 데 도움이 됩니다. PKCE에서 권한 부여 코드 흐름을 사용하는 단일 페이지 애플리케이션의 새로 고침 토큰 수명은 항상 24시간입니다. 브라우저에서 새로 고침 토큰의 보안 관련 사항에 대해 자세히 알아봅니다.

엔드포인트

등록된 애플리케이션은 토큰을 수신하고 다음 엔드포인트에 요청을 전송하여 Azure AD B2C와 통신합니다.

  • https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/authorize
  • https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/token

애플리케이션이 Azure AD B2C에서 수신하는 보안 토큰은 /authorize 또는 /token 엔드포인트에서 올 수 있습니다. ID 토큰이 다음에서 획득되는 경우:

  • /authorize 엔드포인트는 JavaScript 기반 웹 애플리케이션에 로그인하는 사용자에게 자주 사용되는 암시적 흐름을 사용하여 수행됩니다. 그러나 앱이 MSAL.js 2.0 이상을 사용하는 경우 MSAL.js 2.0 이상이 PKCE를 사용하여 권한 부여 코드 흐름을 지원하므로 앱 등록에서 암시적 흐름 부여를 사용하도록 설정하지 마세요.
  • /token 엔드포인트는 권한 부여 코드 흐름을 사용하여 수행되며, 이 흐름은 브라우저에서 토큰을 숨깁니다.

클레임

Azure AD B2C를 사용하는 경우 토큰의 콘텐츠를 세밀하게 제어할 수 있습니다. 애플리케이션에 필요한 클레임에 특정 사용자 데이터 집합을 보내도록 사용자 흐름 및 사용자 지정 정책을 구성할 수 있습니다. 이러한 클레임에는 displayNameemailAddress와 같은 표준 속성이 포함될 수 있습니다. 애플리케이션은 이러한 클레임을 사용하여 사용자 및 요청을 안전하게 인증할 수 있습니다.

ID 토큰의 클레임은 특정 순서로 반환되지 않습니다. 언제든지 ID 토큰에 새 클레임을 도입할 수 있습니다. 새 클레임이 도입되면 애플리케이션이 중단되지 않아야 합니다. 클레임에 사용자 지정 사용자 특성을 포함할 수도 있습니다.

다음 표에서는 AZURE AD B2C에서 발급한 ID 토큰 및 액세스 토큰에서 기대할 수 있는 클레임을 나열합니다.

이름 클레임 예제 값 설명
청중 aud 00001111-aaaa-2222-bbbb-3333cccc4444 토큰의 의도한 수신자를 식별합니다. Azure AD B2C의 경우 대상 그룹은 애플리케이션 ID입니다. 애플리케이션은 이 값의 유효성을 검사하고 일치하지 않는 경우 토큰을 거부해야 합니다. 대상 그룹은 리소스와 동의어입니다.
발급자 iss https://<tenant-name>.b2clogin.com/aaaabbbb-0000-cccc-1111-dddd2222eeee/v2.0/ 토큰을 생성하고 반환하는 STS(보안 토큰 서비스)를 식별합니다. 또한 사용자가 인증된 디렉터리를 식별합니다. 애플리케이션은 발급자 클레임의 유효성을 검사하여 토큰이 적절한 엔드포인트에서 제공되었는지 확인해야 합니다.
발급 시간 iat 1438535543 토큰이 발급된 시간(epoch 시간으로 나타낸 시간)입니다.
만료 시간 exp 1438539443 토큰이 유효하지 않은 시간(epoch 시간으로 나타낸 시간)입니다. 애플리케이션은 이 클레임을 사용하여 토큰 수명 유효성을 확인해야 합니다.
다음 날짜부터 nbf 1438535543 토큰이 유효해지는 시간(epoch 시간으로 나타낸 시간)입니다. 이 시간은 일반적으로 토큰이 발급된 시간과 동일합니다. 애플리케이션은 이 클레임을 사용하여 토큰 수명 유효성을 확인해야 합니다.
버전 ver 1.0 Azure AD B2C에서 정의한 ID 토큰의 버전입니다.
코드 해시 c_hash SGCPtt01wxwfgnYZy2VJtQ 토큰이 OAuth 2.0 권한 부여 코드와 함께 발급된 경우에만 ID 토큰에 포함된 코드 해시입니다. 코드 해시를 사용하여 인증 코드의 신뢰성을 확인할 수 있습니다. 이 유효성 검사를 수행하는 방법에 대한 자세한 내용은 OpenID Connect 사양을 참조하세요.
액세스 토큰 해시 at_hash SGCPtt01wxwfgnYZy2VJtQ ID 토큰에는 오직 OAuth 2.0 액세스 토큰과 함께 발급될 때만 액세스 토큰 해시가 포함됩니다. 액세스 토큰 해시를 사용하여 액세스 토큰의 신뢰성을 확인할 수 있습니다. 이 유효성 검사를 수행하는 방법에 대한 자세한 내용은 OpenID Connect 사양을 참조하세요.
논스(Nonce) nonce 12345 nonce는 토큰 재생 공격을 완화하는 데 사용되는 전략입니다. 애플리케이션은 쿼리 매개 변수를 사용하여 권한 부여 요청에서 nonce를 nonce 지정할 수 있습니다. 요청에서 제공한 값은 ID 토큰의 클레임 nonce에서 수정되지 않고 그대로 나타납니다. 이 클레임을 사용하면 애플리케이션이 요청에 지정된 값에 대한 값을 확인할 수 있습니다. 애플리케이션은 ID 토큰 유효성 검사 프로세스 중에 이 유효성 검사를 수행해야 합니다.
주제 sub aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb 토큰이 정보를 어설션하는 주체로, 애플리케이션의 사용자와 같은 대상을 말합니다. 이 값은 변경할 수 없으며 재할당 또는 재사용할 수 없습니다. 예를 들어 리소스 액세스에 토큰을 사용할 때 이 값을 사용하면 안전하게 인증 검사를 수행할 수 있습니다. 기본적으로 주체 클레임은 디렉터리에 있는 사용자의 개체 ID로 채워집니다.
인증 컨텍스트 클래스 참조 acr 해당 없음 이전 정책에서만 사용됩니다.
트러스트 프레임워크 정책 tfp b2c_1_signupsignin1 ID 토큰을 획득하는 데 사용된 정책의 이름입니다.
인증 시간 auth_time 1438535543 사용자가 마지막으로 자격 증명을 입력한 시간(epoch 시간으로 나타낸 시간)입니다. 해당 인증이 새 로그인, SSO(Single Sign-On) 세션 또는 다른 로그인 유형인지에 대한 차별은 없습니다. 애플리케이션(또는 사용자)이 auth_time Azure AD B2C에 대해 인증 시도를 시작한 마지막 시간입니다. 인증하는 데 사용되는 메서드는 구분되지 않습니다.
범위 scp Read 액세스 토큰에 대한 리소스에 부여된 권한입니다. 부여된 여러 권한은 공백으로 구분됩니다.
권한 있는 당사자 azp 975251ed-e4f5-4efd-abcb-5f1a8f566ab7 요청을 시작한 클라이언트 애플리케이션의 애플리케이션 ID 입니다.

구성 / 설정

다음 속성은 Azure AD B2C에서 내보낸 보안 토큰의 수명을 관리하는 데 사용됩니다.

  • 액세스 및 ID 토큰 수명(분) - 보호된 리소스에 대한 액세스 권한을 얻는 데 사용되는 OAuth 2.0 전달자 토큰의 수명입니다. 기본값은 60분입니다. 최솟값(포함)은 5분입니다. 최대(포함)는 1,440분입니다.

  • 새로 고침 토큰 수명(일) - 새로 고침 토큰을 사용하여 새 액세스 또는 ID 토큰을 획득할 수 있는 최대 기간입니다. 또한 애플리케이션에 offline_access 범위가 부여된 경우 이 기간 동안 새로 고침 토큰을 획득할 수 있습니다. 기본값은 14일입니다. 최솟값(포함)은 1일입니다. 최대(포함)는 90일입니다.

  • 새로 고침 토큰 슬라이딩 윈도우 수명(일) - 이 기간이 경과한 후에는 애플리케이션에서 획득한 가장 최근 새로 고침 토큰의 유효 기간에 관계없이 사용자가 다시 인증해야 합니다. 스위치가 Bounded로 설정된 경우에만 제공할 수 있습니다. 새로 고침 토큰 수명(일) 값보다 크거나 같아야 합니다. 스위치가 만료 없음으로 설정된 경우 특정 값을 제공할 수 없습니다. 기본값은 90일입니다. 최솟값(포함)은 1일입니다. 최대(포함)는 365일입니다.

다음 사용 사례는 이러한 속성을 사용하여 사용하도록 설정됩니다.

  • 사용자가 애플리케이션에서 지속적으로 활성 상태인 한 사용자가 모바일 애플리케이션에 무기한 로그인 상태를 유지하도록 허용합니다. 로그인 사용자 흐름에서 새로 고침 토큰 슬라이딩 윈도우 수명(일)만료 없음 으로 설정할 수 있습니다.
  • 적절한 액세스 토큰 수명을 설정하여 업계의 보안 및 규정 준수 요구 사항을 충족합니다.

이러한 설정은 암호 재설정 사용자 흐름에 사용할 수 없습니다.

호환성

다음 속성은 토큰 호환성을 관리하는 데 사용됩니다.

  • 발급자(iss) 클레임 - 이 속성은 토큰을 발급한 Azure AD B2C 테넌트를 식별합니다. 기본값은 https://<___domain>/{B2C tenant GUID}/v2.0/입니다. Azure AD B2C 테넌트와 토큰 요청에 사용된 사용자 흐름의 ID를 포함하는 값은 https://<___domain>/tfp/{B2C tenant GUID}/{Policy ID}/v2.0/입니다. 애플리케이션 또는 라이브러리에서 Azure AD B2C가 OpenID Connect Discovery 1.0 사양을 준수해야 하는 경우 이 값을 사용합니다.

  • 주체(하위) 클레임 - 이 속성은 토큰이 정보를 어설션하는 엔터티를 식별합니다. 기본값은 토큰의 클레임을 사용자의 개체 ID로 채우는 sub입니다. 지원되지 않는 값은 이전 버전과의 호환성을 위해서만 제공됩니다. 가능한 한 빨리 ObjectID 로 전환하는 것이 좋습니다.

  • 정책 ID를 나타내는 클레임 - 이 속성은 토큰 요청에 사용된 정책 이름이 채워지는 클레임 유형을 식별합니다. 기본값은 tfp입니다. acr 값은 이전 버전과의 호환성을 위해서만 제공됩니다.

통과

사용자 여정이 시작되면 Azure AD B2C는 ID 공급자로부터 액세스 토큰을 받습니다. Azure AD B2C는 해당 토큰을 사용하여 사용자에 대한 정보를 검색합니다. 사용자 흐름에서 클레임을 사용하도록 설정하여 Azure AD B2C에 등록한 애플리케이션에 토큰을 전달 합니다. 애플리케이션은 토큰을 클레임으로 전달하는 데 활용하기 위해 권장되는 사용자 흐름을 사용해야 합니다.

Azure AD B2C는 현재 Facebook 및 Google을 포함한 OAuth 2.0 ID 공급자의 액세스 토큰 전달만 지원합니다. 다른 모든 ID 공급자의 경우 클레임이 비어 반환됩니다.

유효성 검사

토큰의 유효성을 검사하려면 애플리케이션에서 토큰의 서명과 클레임을 모두 확인해야 합니다. 원하는 언어에 따라 많은 오픈 소스 라이브러리를 사용하여 JWT의 유효성을 검사할 수 있습니다. 자체 유효성 검사 논리를 구현하는 대신 이러한 옵션을 탐색하는 것이 좋습니다.

서명 유효성 검사

JWT에는 세 개의 세그먼트, 헤더, 본문서명이 포함됩니다. 서명 세그먼트는 애플리케이션에서 신뢰할 수 있도록 토큰의 신뢰성을 확인하는 데 사용할 수 있습니다. Azure AD B2C 토큰은 RSA 256과 같은 업계 표준 비대칭 암호화 알고리즘을 사용하여 서명됩니다.

토큰의 헤더에는 토큰 서명에 사용되는 키 및 암호화 방법에 대한 정보가 포함됩니다.

{
        "typ": "JWT",
        "alg": "RS256",
        "kid": "GvnPApfWMdLRi8PDmisFn7bprKg"
}

alg 클레임의 값은 토큰에 서명하는 데 사용된 알고리즘입니다. kid 클레임의 값은 토큰에 서명하는 데 사용된 공개 키입니다. 언제든지 Azure AD B2C는 퍼블릭-프라이빗 키 쌍 집합 중 하나를 사용하여 토큰에 서명할 수 있습니다. Azure AD B2C는 가능한 키 집합을 주기적으로 회전합니다. 이러한 키 변경 내용을 자동으로 처리하도록 애플리케이션을 작성해야 합니다. Azure AD B2C에서 사용하는 공개 키에 대한 업데이트를 확인하는 적절한 빈도는 24시간마다입니다. 예기치 않은 키 변경을 처리하려면 예기치 않은 kid 값을 받는 경우 퍼블릭 키를 다시 검색하도록 애플리케이션을 작성해야 합니다.

Azure AD B2C에는 OpenID Connect 메타데이터 엔드포인트가 있습니다. 애플리케이션은 이 엔드포인트를 사용하여 런타임에 Azure AD B2C에 대한 정보를 요청할 수 있습니다. 이 정보에는 엔드포인트, 토큰 콘텐츠 및 토큰 서명 키가 포함됩니다. Azure AD B2C 테넌트에는 각 정책에 대한 JSON 메타데이터 문서가 포함되어 있습니다. 메타데이터 문서는 몇 가지 유용한 정보를 포함하는 JSON 개체입니다. 메타데이터에는 토큰 서명에 사용되는 공개 키 집합의 위치를 제공하는 jwks_uri 포함됩니다. 해당 위치는 여기에 제공되지만 메타데이터 문서를 사용하고 jwks_uri 구문 분석하여 위치를 동적으로 가져오는 것이 가장 좋습니다.

https://contoso.b2clogin.com/contoso.onmicrosoft.com/b2c_1_signupsignin1/discovery/v2.0/keys

이 URL에 있는 JSON 문서에는 특정 순간에 사용 중인 모든 공개 키 정보가 포함되어 있습니다. 앱은 kid JWT 헤더의 클레임을 사용하여 특정 토큰에 서명하는 데 사용되는 JSON 문서에서 공개 키를 선택할 수 있습니다. 그런 다음 올바른 공개 키와 표시된 알고리즘을 사용하여 서명 유효성 검사를 수행할 수 있습니다.

테넌트 정책에 B2C_1_signupsignin1 대한 contoso.onmicrosoft.com 메타데이터 문서는 다음 위치에 있습니다.

https://contoso.b2clogin.com/contoso.onmicrosoft.com/b2c_1_signupsignin1/v2.0/.well-known/openid-configuration

토큰에 서명하는 데 사용된 정책(및 메타데이터를 요청하는 위치)을 확인하려면 두 가지 옵션이 있습니다. 먼저 정책 이름은 토큰의 tfp (기본값) 또는 acr 클레임(구성된 대로)에 포함됩니다. 본문을 디코딩하고 결과 JSON 문자열을 역직렬화하여 base-64를 사용하여 JWT 본문에서 클레임을 구문 분석할 수 있습니다. tfp 또는 acr 클레임은 토큰을 발급하는 데 사용된 정책의 이름입니다. 다른 옵션은 요청을 실행할 때 매개 변수 값으로 state 정책을 인코딩한 다음 디코딩하여 사용된 정책을 확인하는 것입니다. 두 방법 중 하나가 유효합니다.

Azure AD B2C는 RFC 3447 사양을 기반으로 하는 RS256 알고리즘을 사용합니다. 공개 키는 RSA 모듈러스() 및 RSA 공용 지수(ne)의 두 가지 구성 요소로 구성됩니다. 토큰 유효성 검사를 위해 프로그래밍 방식으로 값을 인증서 형식으로 변환 ne 할 수 있습니다.

서명 유효성 검사를 수행하는 방법에 대한 설명은 이 문서의 범위를 벗어습니다. 토큰의 유효성을 검사하는 데 도움이 되는 많은 오픈 소스 라이브러리를 사용할 수 있습니다.

클레임의 유효성 검사

애플리케이션 또는 API가 ID 토큰을 받으면 ID 토큰의 클레임에 대해서도 여러 검사를 수행해야 합니다. 다음 클레임을 확인해야 합니다.

  • audience - ID 토큰이 귀하의 애플리케이션에 의도적으로 제공되었는지 확인합니다.
  • 이전 및 만료 시간이아님 - ID 토큰이 만료되지 않았는지 확인합니다.
  • 발급자 - Azure AD B2C에서 애플리케이션에 토큰이 발급되었는지 확인합니다.
  • nonce - 토큰 재생 공격 완화 전략입니다.

애플리케이션에서 수행해야 하는 유효성 검사의 전체 목록은 OpenID Connect 사양을 참조하세요.

액세스 토큰을 사용하는 방법에 대해 자세히 알아봅니다.