Skip to main content
Este tema proporciona un ejemplo de un token XSTS del ejemplo de cliente SimpleHttp a medida que se procesa a través del ejemplo Game Service. Este token se generó con el siguiente usuario de confianza y la siguiente configuración en Partner Center:

Token de ejemplo

División y gestión del token externo

Las distintas secciones del token se pueden desglosar de la siguiente manera.

Encabezado del token externo

Así, por ejemplo, el componente del encabezado es:
Puede introducir el encabezado en la herramienta de JSON Web Token (JWT) de https://jwt.io para ver el siguiente contenido del encabezado una vez descodificado.
Esto muestra que se trata de un JWT y que el certificado usado para cifrar la clave de cifrado de contenido tiene una huella digital de 0004A3A12C1D5E59307A308D6D02E83978E2A9AE, que puede obtener usando Base64URL para descodificar el valor x5t. AASjoSwdXlkwejCNbQLoOXjiqa4 -> descodificación Base64Url a matriz de bytes -> [ 00-04-A3-A1-2C-1D-5E-59-30-7A-30-8D-6D-02-E8-39-78-E2-A9-AE ] -> Convertir en una cadena y quitar los caracteres '-'

Descifrado de la clave de cifrado de contenido (CEK)

Con la clave privada del certificado del usuario de confianza que coincide con la huella digital, podemos descifrar la clave de cifrado de contenido (CEK):
La descodificación base64Url devuelve la siguiente matriz de bytes:
A continuación, podemos descifrar el valor descodificado con Base64URL mediante la clave privada RSA, lo que devuelve la CEK totalmente descodificada.

Obtención de HMAC, AES e IV (vector de inicialización) para descifrar la carga

A continuación, la CEK se puede dividir en la hmacKey y la aesKey. La clave HMAC es la primera mitad de la CEK y la clave AES es la segunda mitad.
La última pieza que necesitamos para descifrar la carga del token externo es el vector de inicialización. El IV simplemente se puede descodificar en base64 a partir de la tercera sección del token externo.

Descifrado de la carga

Con las claves anteriores, ahora podemos descifrar la carga del token externo, con el resultado siguiente. Para ver el código que realiza este descifrado, consulte las API DecryptAsync y Decrypt en XstsUtilities.cs del ejemplo Game Service.
Al descomprimir esta matriz de bytes obtenemos el token JWT interno. Para obtener más información, consulte DecompressAsync en XstsUtilities.cs del ejemplo Game Service.

Gestión del token interno descifrado

Después de descomprimir la matriz de bytes descifrada de la carga del token externo, ahora tenemos un JSON Web Token (JWT) estándar que alberga las notificaciones y la información que contiene las notificaciones del usuario, el título y el dispositivo, tal como se define en el usuario de confianza.
Con la herramienta de descodificación de JWT de https://jwt.io, podemos ver estas notificaciones.
Para obtener más información sobre las notificaciones que se pueden incluir en la configuración de su usuario de confianza, consulte Notificaciones de los tokens de seguridad de XBOX services.

Validación del token interno

Para validar el contenido del token interno, su servicio debe validar la firma del JWT siguiendo el estándar definido en el RFC 7516 de JWT. Este token de ejemplo está configurado para la validación de firma con JKU en Partner Center, por lo que el encabezado del token interno nos proporciona lo siguiente:
El valor kid identifica la clave de firma específica de XBOX Live usada para generar la firma. El valor jku apunta a una dirección URL desde la que se puede descargar la clave pública y usarla para validar la firma. Si el nombre de dominio del jku no es “xsts-keys.auth.xboxlive.com”, no se debe confiar en el token. Se recomienda almacenar la clave en caché en tiempo de ejecución, ya que las claves de firma cambian con frecuencia. Esto también permite que su servicio sea resistente y pueda gestionar la obtención de claves nuevas cuando se actualizan sobre la marcha, sin tiempo de inactividad ni mantenimiento. Si usa una solución JWT de código abierto existente, la validación de la firma se realiza automáticamente al pasar la clave pública JKW a la API de descodificación de JWK. Después de validar la firma, su servicio puede confiar en que el certificado y los datos que contiene son auténticos. Para obtener más información sobre la validación del token interno tanto para la JWK de firma de XBOX Live como para el certificado de firma de XBOX Live, consulte Encabezado del token interno y validación de la firma

Identificación del usuario correcto en el token

Los tokens tendrán identidades de usuario para todos los usuarios de XBOX Live que tuvieran la sesión iniciada activamente en el momento en que se creó el token en el cliente. Por lo tanto, su servicio debe usar el valor del hash de usuario del encabezado de autorización HTTP y encontrar el valor ush coincidente dentro de las identidades de usuario. Para este token de ejemplo, el encabezado Authorization tenía un hash de usuario de 18026470712427541036. A partir de esto, podemos ver que las notificaciones corresponden a este hash de usuario, cuyo gamertag es 2 Dev 079574836. Aunque este token solo tiene una identidad de usuario en las notificaciones del token, aun así debemos validar que coincide con el hash de usuario del encabezado.

Consulte también

Notificaciones de los tokens de seguridad de XBOX services Token de seguridad de XBOX Live de ejemplo Autenticación de XBOX services para servicios de títulos
Última modificación el 28 de agosto de 2026