예제 토큰
외부 토큰 분할 및 처리
토큰의 각 섹션은 다음과 같이 분리할 수 있습니다.외부 토큰 헤더
예를 들어, 헤더 구성 요소는 다음과 같습니다.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)를 복호화할 수 있습니다.페이로드를 복호화하기 위한 HMAC, AES 및 IV(초기화 벡터) 얻기
CEK는hmacKey와 aesKey로 분할할 수 있습니다.
HMAC 키는 CEK의 전반부이며 AES 키는 후반부입니다.
페이로드 복호화
위의 키를 사용하여 이제 외부 토큰의 페이로드를 아래와 같이 복호화할 수 있습니다. 이 복호화를 수행하는 코드는 Game Service 샘플의 XstsUtilities.cs에 있는DecryptAsync 및 Decrypt API를 참조하세요.
DecompressAsync를 참조하세요.
복호화된 내부 토큰 처리
외부 토큰 페이로드의 복호화된 바이트 배열의 압축을 푼 후, 이제 relying party에 정의된 사용자, 타이틀 및 디바이스에 대한 클레임이 포함된 클레임 및 정보를 담고 있는 표준 JSON Web Token (JWT)가 있습니다.내부 토큰 검증
내부 토큰의 콘텐츠를 검증하려면 서비스에서 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입니다.
이를 통해 게이머태그가 2 Dev 079574836인 이 사용자 해시에 대한 클레임이 있음을 알 수 있습니다.
이 토큰의 토큰 클레임에는 사용자 ID가 하나만 있지만, 그럼에도 이것이 헤더의 사용자 해시와 일치하는지 여전히 검증해야 합니다.
