메인 콘텐츠로 건너뛰기
이 문서에서는 XBOX Secure Token Service(XSTS)가 생성한 XBOX services 보안 토큰의 구조에 대한 개요를 제공합니다. 이러한 토큰은 일부 문서에서 X-토큰 또는 XSTS 토큰이라고도 합니다. XBOX services는 사용자 및 디바이스 인증을 위해 XSTS가 생성한 보안 토큰을 사용합니다. XSTS 토큰은 타이틀 사용에도 이용할 수 있습니다. 타이틀 XSTS 토큰은 대상 및 용도에 따라 다양한 클레임과 정보를 제공하도록 Partner Center에서 구성합니다. 토큰은 특정 relying party를 대상으로 하며, 이는 동일한 token configuration, encryption type 및 signature policy를 공유하는 서비스 엔드포인트 집합을 나타냅니다. 자세한 내용은 다음과 같습니다.
  • Token configuration: 토큰에 포함되는 클레임과 토큰 수명
  • Encryption key: 토큰을 암호화하는 데 사용된 키
  • Signature policy: 무결성 검증을 위해 서명해야 하는 요청 부분(헤더 및/또는 본문) 지정
XBOX services는 타이틀에서는 불투명한 동일한 사전 구성된 relying party를 사용합니다. 타이틀이 호출하는 자체 서비스를 보유한 게시자는 Partner Center XBOX services 구성을 통해 relying party를 구성해야 합니다.

여러 사용자가 포함된 토큰

XBOX의 경우 토큰에는 현재 콘솔에 로그인한 모든 사용자의 사용자 ID가 포함됩니다. 토큰의 xui 클레임은 이러한 사용자 개체를 하나 이상 포함하는 배열입니다. 수신 요청에는 다음과 같은 형식의 인증 헤더가 있습니다. XBL3.0 x=<user hash>;<token> user hash 값은 다음 세 가지 값 중 하나입니다.
  • 토큰의 사용자 ID 중 하나의 사용자 해시 클레임과 일치하는 숫자로, 요청이 해당 특정 사용자에 대한 것임을 나타냅니다.
  • 별표(*)로, 토큰에 포함된 모든 사용자에 대한 요청임을 나타냅니다.
  • 하이픈(-)으로, 토큰의 어떤 사용자와도 관련이 없는 요청임을 나타냅니다.
헤더의 user hash 값이 토큰의 사용자 ID 중 하나의 user/hash 클레임과 일치하면 요청은 해당 사용자에게만 적용됩니다. user hash 값은 해당 인스턴스에서 고유하지만, 지정된 사용자에 대해 향후 XSTS 토큰에서 항상 동일하다고 보장되지는 않습니다. 영구 식별자로 사용하거나 캐시해서는 안 됩니다.

토큰 구조

XSTS 토큰은 암호화된 페이로드가 있는 사용자 지정 JSON Web Token(JWT) 형식을 사용하며, 이를 외부 토큰이라고 합니다. 이 형식은 JWT RFC 7519를 따르며, 페이로드 해독을 용이하게 하기 위해 두 개의 추가 섹션이 있습니다. 토큰의 각 부분은 인코딩된 토큰 문자열에서 마침표로 구분됩니다. 해독된 페이로드는 내부 토큰이라고 하는 표준 JSON Web Token(JWT RFC 7519)입니다. 내부 토큰에는 해당 relying party 구성의 클레임과 인증 정보가 포함되어 있습니다. 이러한 개별 부분 및 섹션으로 분리된 샘플 토큰은 XBOX services 보안 토큰 샘플을 참조하세요. XSTS 토큰 구조 그림입니다. 위의 모든 섹션이 포함된 XSTS 토큰의 최대 크기는 64KB입니다.

외부 토큰 암호화

외부 토큰은 두 개의 암호화 키를 사용하여 내부 토큰과 그 클레임을 보호합니다. 먼저 페이로드는 XSTS 토큰이 생성될 때 만들어진 콘텐츠 암호화 키로 암호화됩니다. 그런 다음 이 콘텐츠 암호화 키 자체는 토큰이 생성되는 해당 relying party에 연결된 비대칭 공개 인증서 키를 사용하여 암호화됩니다. 이 공개 인증서 키는 relying party를 구성할 때 Partner Center에 업로드됩니다. 내부 토큰을 나타내는 해독된 페이로드에 액세스하려면 서비스는 다음을 수행해야 합니다.
  1. 외부 토큰의 x5t 헤더를 확인하여 콘텐츠 암호화 키를 암호화하는 데 사용된 인증서의 지문을 가져옵니다.
  2. relying party의 개인 인증서 키를 사용하여 콘텐츠 암호화 키를 해독합니다.
  3. 콘텐츠 암호화 키와 초기화 벡터를 사용하여 외부 토큰 페이로드를 해독합니다.

레거시 암호화 및 토큰 형식

일부 타이틀 및 게시자는 여전히 JWT RFC 7519 형식을 따르지 않는 이전 레거시 XSTS 토큰 형식을 사용하고 있을 수 있습니다. 이 옵션은 XBOX Developer Portal(XDP)에서 마이그레이션되었거나 호환성을 위해 이 형식이 필요한 타이틀에만 해당됩니다. 이 JWT 형식은 새 토큰 구성에는 사용하지 않아야 합니다. 또한 Partner Center에는 이전에 대칭 공유 키 암호화 옵션이 포함되어 있었습니다. 이 옵션은 보안 문제로 인해 더 이상 사용되지 않으며 새 relying party 구성에서는 사용할 수 없습니다.

내부 토큰

페이로드가 해독되면 JWT RFC 7516을 따르는 내부 토큰을 나타내는 UTF8 배열이 됩니다. 내부 토큰의 페이로드에는 토큰이 생성된 relying party에 대해 구성된 클레임이 포함되어 있습니다. Partner Center에서 relying party에 대해 구성되지 않은 클레임은 토큰 페이로드에 포함되지 않습니다. 클레임 값은 기존 형식(예: 문자열, 정수, GUID)일 수 있습니다. 더 복잡한 구조를 나타내는 JSON 개체일 수도 있습니다. 자세한 내용은 XBOX services 보안 토큰 클레임을 참조하세요.
데이터가 없는 클레임 값은 null 값을 통해 표시되거나 토큰에서 완전히 누락될 수 있습니다. 타이틀 서비스는 클레임 값을 구문 분석할 때 이를 고려해야 합니다.

내부 토큰 헤더 및 서명 검증

내부 토큰에는 내부 토큰의 서명 생성 및 검증과 관련된 정보가 포함된 헤더가 있습니다. 이 서명 검증은 토큰이 XBOX Live 서비스에서 온 것이며 변조되지 않았음을 보증합니다. 현재 검증 서명을 생성하는 데 사용되며 Partner Center에서 Relying Party에 대해 구성할 수 있는 두 가지 키 유형이 지원됩니다.
  1. 현재 XSTS 서명 JWK(JSON Web Key)
  2. 현재 XSTS 서명 인증서
2024년 12월부터 토큰이 XBL 서명 인증서용으로 구성된 경우에도 모든 내부 토큰 헤더에는 JWK 관련 값(kid 및 jku)이 포함됩니다. 즉, 내부 토큰 헤더에 x5u/x5t 및 jku/kid 값이 모두 포함될 수 있으며, 두 쌍 모두 동일한 서명 인증서를 가리킵니다. 인증서는 각각 x5u 또는 jku URI에서 인증서를 읽을 때 예상되는 올바른 형식으로 호스팅됩니다. XSTS 서명 인증서와 JWK 방법 모두 필요에 따라 파트너에게 사전 통지 없이 업데이트되고 새로 고쳐지도록 설계되었습니다. 따라서 서비스는 토큰 검증에 사용되는 XSTS 서명 인증서 또는 현재 JWK의 저장된 사본을 하드코딩하거나 설치에 의존해서는 안 됩니다. 서비스는 서명 키/인증서를 캐시한 후 캐시에 없는 x5t 또는 kid가 제공될 때 새 키/인증서를 다운로드하여 캐시에 추가해야 합니다. 그러면 새 XSTS 서명 JWK 또는 인증서가 배포될 때 새 서명 키를 지원하기 위해 서비스에서 별도의 작업이 필요하지 않습니다. 키나 인증서를 다운로드하기 전에 URI의 호스트가 예상 값과 일치하는지 확인하여 XBOX Live 서비스에서 생성한 유효한 키나 인증서를 다운로드하는지 확인해야 합니다. 자세한 내용과 각 유형에 대해 예상되는 URI 호스트 값은 XSTS JKW 서명 키 사용 및 XSTS 서명 인증서 사용을 참조하세요. XSTS 서명 JWK가 자주 회전되므로 파트너는 Partner Center에서 relying party에 대해 JKU 옵션을 사용하도록 설정하는 것이 좋습니다. Game Service 샘플은 이러한 권장 사항을 강조합니다. relying party가 JKU 옵션으로 구성된 경우 토큰은 현재 XSTS 서명 JWK를 사용하고 내부 토큰에 다음 헤더 값이 있습니다.
서비스에서 새 서명 키를 다운로드하기 전에 jku URL이 xsts-keys.auth.xboxlive.com 도메인의 일부인지 확인하세요. 그렇지 않으면 토큰을 거부하고 키를 다운로드하지 않아야 합니다.
유효한 모든 서명 인증서 키는 https://xsts-keys.auth.xboxlive.com/keys에서 사용할 수 있습니다. 서비스 인스턴스 시작 시 URL에서 찾은 키로 서명 키 캐시를 미리 채우는 것이 좋습니다. 서비스는 런타임 시 캐시에 아직 없는 토큰의 새 키를 처리해야 하며, 전체 키 목록을 확인하여 kid와 일치하는 키를 찾은 다음 캐시해야 합니다. relying party에 Partner Center에서 JKU 옵션이 사용되도록 설정되어 있지 않은 경우 토큰은 현재 XSTS 서명 인증서를 사용하고 내부 토큰에 다음 헤더 값이 있습니다.
Relying Party가 JKU/KID용으로 구성되어 있지 않더라도 이러한 클레임은 내부 토큰의 헤더에 포함됩니다. 값은 x5t 및 x5u의 값을 반영합니다.
서비스에서 새 서명 인증서 키를 다운로드하기 전에 x5u 또는 jku의 URL이 xsts.auth.xboxlive.com 도메인의 일부인지 확인하세요. 그렇지 않으면 토큰을 거부하고 인증서를 다운로드하지 않아야 합니다.
유효한 모든 서명 인증서 키는 https://xsts.auth.xboxlive.com/xsts/signingkeys에서 Base64로 인코딩된 인증서의 JSON 배열로 사용할 수 있습니다. 서비스 인스턴스 시작 시 이 엔드포인트의 인증서 키로 서명 키 캐시를 미리 채우는 것이 좋습니다. 서비스는 여전히 런타임 시 캐시에 없는 토큰의 새 키를 처리해야 합니다. JWT RFC 7519 문서에서:
4.1.5 “x5u” (X.509 URL) Header Parameter The “x5u” (X.509 URL) Header Parameter is a URI [RFC3986] that refers to a resource for the X.509 public key certificate or certificate chain [RFC5280] corresponding to the key used to digitally sign the JWS. The identified resource must provide a representation of the certificate or certificate chain that conforms to RFC 5280 [RFC5280] in PEM-encoded form, with each certificate delimited as specified in Section 6.1 of RFC 4945 [RFC4945]. The certificate containing the public key corresponding to the key used to digitally sign the JWS must be the first certificate. The certificate might be followed by additional certificates, with each subsequent certificate being the one used to certify the previous one. The protocol used to acquire the resource must provide integrity protection; an HTTP GET request to retrieve the certificate must use TLS [RFC2818] [RFC5246]; and the identity of the server must be validated, as per Section 6 of RFC 6125 [RFC6125]. Also, see Section 8 on TLS requirements. Use of this Header Parameter is OPTIONAL.

ID

주체의 측면을 설명하는 관련 클레임 집합을 ID라고 합니다. 구조적 관점에서 이는 값이 JSON 개체인 클레임입니다. 해당 개체는 클레임 집합이거나 클레임 집합의 배열입니다. XBOX One 토큰에 포함될 수 있는 ID는 다음과 같이 나열 및 설명되어 있습니다(특정 짧은 이름이 괄호 안에 표시됨).

디바이스 ID(xdi)

디바이스 ID의 클레임은 토큰을 요청한 디바이스에 대한 세부 정보를 제공합니다. 토큰에는 하나의 디바이스 ID만 있을 수 있습니다. 즉, 디바이스 ID는 클레임 및 값의 목록입니다.

타이틀 ID(xti)

타이틀 ID의 클레임은 토큰을 요청한 XBOX One에서 실행되고 있는 타이틀에 대한 세부 정보를 제공합니다. 토큰에는 하나의 타이틀 ID만 포함될 수 있습니다. 토큰에 있는 경우 타이틀 ID는 클레임 및 값의 간단한 목록입니다. 전체 클레임 값 목록은 XBOX services 보안 토큰 클레임을 참조하세요.

서비스 ID(xsi)

서비스 ID의 클레임은 요청이 XBOX One이 아닌 해당 서비스에서 온 경우 서비스에 대한 세부 정보를 제공합니다. 토큰에는 하나의 서비스 ID만 있을 수 있습니다. 있는 경우 서비스 ID는 클레임 및 값의 간단한 목록입니다.

사용자 ID(xui)

사용자 ID의 클레임은 사용자에 대한 세부 정보를 제공합니다. 콘솔에 두 명 이상의 사용자가 로그인한 경우 토큰에 두 개 이상의 사용자 ID가 있습니다. 있는 경우 사용자 ID는 클레임 집합의 배열입니다(개체가 하나인 배열이라도). 요청의 인증 헤더에는 토큰의 어떤 사용자에게 요청이 적용되는지 결정하는 데 필요한 정보가 포함되어 있습니다. 여러 사용자와 함께 토큰을 처리하는 방법에 대한 자세한 내용은 여러 사용자가 포함된 토큰을 참조하세요.

집계 ID(xai)

집계 ID의 클레임은 연령 그룹(값은 가장 어린 사용자의 값과 일치) 및 권한과 같이 토큰의 모든 사용자를 나타내는 병합된 값 집합을 제공합니다. 이러한 값을 별도의 ID로 결합하면 서비스가 분석을 직접 수행하지 않고도 결정을 내릴 수 있습니다. 또한 금지 조치에 의해 차단된 권한이 강제 적용되도록 합니다.

참고 항목

XBOX services 보안 토큰 클레임 XBOX Live 보안 토큰 샘플 타이틀 서비스를 위한 XBOX services 인증
마지막 수정일 2026년 11월 5일