Skip to main content
이 항목에서는 Game Service 샘플을 통해 처리되는 SimpleHttp 클라이언트 샘플의 XSTS 토큰 예제를 제공합니다. 이 토큰은 파트너 센터(Partner Center)에서 다음의 Relying Party 및 설정에 대해 생성되었습니다.

예제 토큰

외부 토큰 분할 및 처리

토큰의 각 섹션은 다음과 같이 분리할 수 있습니다.

외부 토큰 헤더

예를 들어, 헤더 구성 요소는 다음과 같습니다.
이 헤더를 https://jwt.io의 JSON Web Token (JWT) 도구에 넣으면 디코딩된 후 아래와 같은 헤더 내용을 확인할 수 있습니다.
이는 이것이 JWT이며 콘텐츠 암호화 키(Content Encryption Key)를 암호화하는 데 사용된 인증서의 썸네일이 0004A3A12C1D5E59307A308D6D02E83978E2A9AE임을 보여줍니다. 이 값은 x5t 값을 Base64URL로 디코딩하여 얻을 수 있습니다. AASjoSwdXlkwejCNbQLoOXjiqa4 -> Base64Url 디코딩하여 바이트 배열로 -> [ 00-04-A3-A1-2C-1D-5E-59-30-7A-30-8D-6D-02-E8-39-78-E2-A9-AE ] -> 문자열로 변환하고 '-' 문자를 제거

콘텐츠 암호화 키(CEK) 복호화

썸프린트와 일치하는 Relying Party 인증서의 개인 키를 사용하여 콘텐츠 암호화 키(CEK)를 복호화할 수 있습니다.
base64Url 디코딩을 사용하면 다음의 바이트 배열이 반환됩니다.
그런 다음 RSA 개인 키를 사용하여 Base64URL 디코딩된 값을 복호화하면 완전히 디코딩된 CEK가 반환됩니다.

페이로드를 복호화하기 위한 HMAC, AES 및 IV(초기화 벡터) 얻기

CEK는 hmacKeyaesKey로 분할할 수 있습니다. HMAC 키는 CEK의 전반부이며 AES 키는 후반부입니다.
외부 토큰의 페이로드를 복호화하기 위해 필요한 마지막 부분은 초기화 벡터입니다. IV는 외부 토큰의 세 번째 섹션에서 단순히 base64 디코딩하면 됩니다.

페이로드 복호화

위의 키를 사용하여 이제 외부 토큰의 페이로드를 아래와 같이 복호화할 수 있습니다. 이 복호화를 수행하는 코드는 Game Service 샘플의 XstsUtilities.cs에 있는 DecryptAsyncDecrypt API를 참조하세요.
이 바이트 배열의 압축을 풀면 내부 JWT 토큰을 얻을 수 있습니다. 자세한 내용은 Game Service 샘플의 XstsUtilities.cs에 있는 DecompressAsync를 참조하세요.

복호화된 내부 토큰 처리

외부 토큰 페이로드의 복호화된 바이트 배열의 압축을 푼 후, 이제 relying party에 정의된 사용자, 타이틀 및 디바이스에 대한 클레임이 포함된 클레임 및 정보를 담고 있는 표준 JSON Web Token (JWT)가 있습니다.
https://jwt.io의 JWT 디코딩 도구를 사용하면 이러한 클레임을 확인할 수 있습니다.
Relying party 구성에 포함될 수 있는 클레임에 대한 자세한 내용은 XBOX services 보안 토큰 클레임을 참조하세요.

내부 토큰 검증

내부 토큰의 콘텐츠를 검증하려면 서비스에서 JWT RFC 7516에 정의된 표준에 따라 JWT의 서명을 검증해야 합니다. 이 예제 토큰은 파트너 센터에서 JKU 서명 검증을 위해 구성되어 있으므로, 내부 토큰의 헤더는 다음과 같습니다.
kid 값은 서명을 생성하는 데 사용된 특정 XBOX Live 서명 키를 식별합니다. jku 값은 공개 키를 다운로드하여 서명을 검증하는 데 사용할 수 있는 URL을 가리킵니다. jku의 도메인 이름이 “xsts-keys.auth.xboxlive.com”이 아닌 경우, 해당 토큰은 신뢰해서는 안 됩니다. 서명 키가 자주 변경되므로 런타임에 키를 캐시하는 것이 좋습니다. 이렇게 하면 서비스가 다운타임이나 유지 관리 없이 즉시 업데이트되는 새로운 키를 얻어 처리할 수 있는 복원력을 갖게 됩니다. 기존 JWT 오픈 소스 솔루션을 사용 중이라면 JKW 공개 키를 JWK 디코딩 API에 전달할 때 서명 검증이 자동으로 수행됩니다. 서명을 검증한 후, 서비스는 인증서와 그 안의 데이터가 진짜임을 신뢰할 수 있습니다. XBOX Live 서명 JWK 및 XBOX Live 서명 인증서 모두에 대한 내부 토큰 검증에 대한 자세한 내용은 내부 토큰 헤더 및 서명 검증을 참조하세요.

토큰에서 올바른 사용자 식별

토큰에는 클라이언트에서 토큰이 생성된 시점에 활성 상태로 로그인한 모든 XBOX Live 사용자에 대한 사용자 ID가 포함됩니다. 따라서 서비스는 HTTP 인증 헤더에서 사용자 해시 값을 사용하고, 사용자 ID 내에서 일치하는 ush 값을 찾아야 합니다. 이 예제 토큰의 경우 Authorization 헤더의 사용자 해시는 18026470712427541036입니다. 이를 통해 Gamertag가 2 Dev 079574836인 이 사용자 해시에 대한 클레임이 있음을 알 수 있습니다. 이 토큰의 토큰 클레임에는 사용자 ID가 하나만 있지만, 그럼에도 이것이 헤더의 사용자 해시와 일치하는지 여전히 검증해야 합니다.

관련 정보

XBOX services 보안 토큰 클레임 샘플 XBOX Live 보안 토큰 타이틀 서비스에 대한 XBOX services 인증
마지막 수정일 2026년 8월 25일