- Token configuration: 토큰에 포함되는 클레임과 토큰 수명
- Encryption key: 토큰을 암호화하는 데 사용된 키
- Signature policy: 무결성 검증을 위해 서명해야 하는 요청 부분(헤더 및/또는 본문) 지정
여러 사용자가 포함된 토큰
XBOX의 경우 토큰에는 현재 콘솔에 로그인한 모든 사용자의 사용자 ID가 포함됩니다. 토큰의xui 클레임은 이러한 사용자 개체를 하나 이상 포함하는 배열입니다. 수신 요청에는 다음과 같은 형식의 인증 헤더가 있습니다.
XBL3.0 x=<user hash>;<token>
user hash 값은 다음 세 가지 값 중 하나입니다.
- 토큰의 사용자 ID 중 하나의 사용자 해시 클레임과 일치하는 숫자로, 요청이 해당 특정 사용자에 대한 것임을 나타냅니다.
- 별표(*)로, 토큰에 포함된 모든 사용자에 대한 요청임을 나타냅니다.
- 하이픈(-)으로, 토큰의 어떤 사용자와도 관련이 없는 요청임을 나타냅니다.
토큰 구조
XSTS 토큰은 암호화된 페이로드가 있는 사용자 지정 JSON Web Token(JWT) 형식을 사용하며, 이를 외부 토큰이라고 합니다. 이 형식은 JWT RFC 7519를 따르며, 페이로드 해독을 용이하게 하기 위해 두 개의 추가 섹션이 있습니다. 토큰의 각 부분은 인코딩된 토큰 문자열에서 마침표로 구분됩니다. 해독된 페이로드는 내부 토큰이라고 하는 표준 JSON Web Token(JWT RFC 7519)입니다. 내부 토큰에는 해당 relying party 구성의 클레임과 인증 정보가 포함되어 있습니다. 이러한 개별 부분 및 섹션으로 분리된 샘플 토큰은 XBOX services 보안 토큰 샘플을 참조하세요.
위의 모든 섹션이 포함된 XSTS 토큰의 최대 크기는 64KB입니다.
외부 토큰 암호화
외부 토큰은 두 개의 암호화 키를 사용하여 내부 토큰과 그 클레임을 보호합니다. 먼저 페이로드는 XSTS 토큰이 생성될 때 만들어진 콘텐츠 암호화 키로 암호화됩니다. 그런 다음 이 콘텐츠 암호화 키 자체는 토큰이 생성되는 해당 relying party에 연결된 비대칭 공개 인증서 키를 사용하여 암호화됩니다. 이 공개 인증서 키는 relying party를 구성할 때 Partner Center에 업로드됩니다. 내부 토큰을 나타내는 해독된 페이로드에 액세스하려면 서비스는 다음을 수행해야 합니다.- 외부 토큰의 x5t 헤더를 확인하여 콘텐츠 암호화 키를 암호화하는 데 사용된 인증서의 지문을 가져옵니다.
- relying party의 개인 인증서 키를 사용하여 콘텐츠 암호화 키를 해독합니다.
- 콘텐츠 암호화 키와 초기화 벡터를 사용하여 외부 토큰 페이로드를 해독합니다.
레거시 암호화 및 토큰 형식
일부 타이틀 및 게시자는 여전히 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에 대해 구성할 수 있는 두 가지 키 유형이 지원됩니다.- 현재 XSTS 서명 JWK(JSON Web Key)
- 현재 XSTS 서명 인증서
서비스에서 새 서명 키를 다운로드하기 전에 jku URL이 xsts-keys.auth.xboxlive.com 도메인의 일부인지 확인하세요. 그렇지 않으면 토큰을 거부하고 키를 다운로드하지 않아야 합니다.
Relying Party가 JKU/KID용으로 구성되어 있지 않더라도 이러한 클레임은 내부 토큰의 헤더에 포함됩니다. 값은 x5t 및 x5u의 값을 반영합니다.
서비스에서 새 서명 인증서 키를 다운로드하기 전에 x5u 또는 jku의 URL이 xsts.auth.xboxlive.com 도메인의 일부인지 확인하세요. 그렇지 않으면 토큰을 거부하고 인증서를 다운로드하지 않아야 합니다.
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.
