跳轉到主要內容
本主題提供來自 SimpleHttp 用戶端範例之 XSTS 權杖的範例,以及它如何透過 Game Service 範例進行處理。 此權杖是針對 Partner Center 中的下列信賴憑證者和設定所產生的:

範例權杖

分割和處理外部權杖

權杖的各個區段可以如下分割。

外部權杖標頭

因此,例如,標頭元件為:
您可以將標頭放入 https://jwt.io 上的 JSON Web 權杖 (JWT) 工具中,以查看解碼後標頭的下列內容。
這顯示這是一個 JWT,且用來加密內容加密金鑰的憑證具有指紋 0004A3A12C1D5E59307A308D6D02E83978E2A9AE,您可以使用 Base64URL 解碼 x5t 值來取得此指紋。 AASjoSwdXlkwejCNbQLoOXjiqa4 -> Base64Url 解碼為位元組陣列 -> [ 00-04-A3-A1-2C-1D-5E-59-30-7A-30-8D-6D-02-E8-39-78-E2-A9-AE ] -> 轉換為字串並移除 '-' 字元

解密內容加密金鑰 (CEK)

使用與指紋相符之信賴憑證者憑證的私密金鑰,我們就可以解密內容加密金鑰 (CEK):
使用 base64Url 解碼會傳回下列位元組陣列:
接著,我們可以使用 RSA 私密金鑰解密 Base64URL 解碼後的值,這會傳回完全解碼的 CEK。

取得 HMAC、AES 和 IV (初始化向量) 以解密承載

接著可以將 CEK 分割為 hmacKey 和 aesKey。 HMAC 金鑰是 CEK 的前半部,而 AES 金鑰是後半部。
我們解密外部權杖承載所需的最後一項是初始化向量。 IV 可以直接從外部權杖的第三個區段進行 base64 解碼。

解密承載

使用上述金鑰,我們現在可以將外部權杖的承載解密如下。 如需執行此解密的程式碼,請參閱 Game Service 範例之 XstsUtilities.cs 中的 DecryptAsync 和 Decrypt API。
將此位元組陣列解壓縮之後,我們會得到內部 JWT 權杖。 如需詳細資訊,請參閱 Game Service 範例之 XstsUtilities.cs 中的 DecompressAsync。

處理解密後的內部權杖

將外部權杖承載之解密位元組陣列解壓縮之後,我們現在擁有一個標準的 JSON Web 權杖 (JWT),其中包含宣告和資訊,而這些資訊包含信賴憑證者中所定義之使用者、遊戲和裝置的宣告。
使用 https://jwt.io 上的 JWT 解碼工具,我們可以看到這些宣告。
如需可包含在您信賴憑證者設定中之宣告的詳細資訊,請參閱 XBOX 服務安全性權杖宣告。

驗證內部權杖

若要驗證內部權杖的內容,您的服務應依照 JWT RFC 7516 中定義的標準驗證 JWT 的簽章。 此範例權杖在 Partner Center 中設定為使用 JKU 簽章驗證,因此內部權杖的標頭會提供下列內容:
kid 值會識別用來產生簽章的特定 XBOX Live 簽署金鑰。 jku 值指向可下載公開金鑰並用來驗證簽章的 URL。 如果 jku 的網域名稱不是 “xsts-keys.auth.xboxlive.com”,則不應信任該權杖。 建議在執行階段快取金鑰,因為簽署金鑰經常變更。 這也可讓您的服務具有復原能力,並能在金鑰即時更新時處理取得新金鑰,而不會停機或需要維護。 如果您使用現有的 JWT 開放原始碼解決方案,當您將 JKW 公開金鑰傳入 JWK 解碼 API 時,會自動完成簽章驗證。 驗證簽章之後,您的服務就可以信任憑證及其中的資料是真實的。 如需 XBOX Live 簽署 JWK 和 XBOX Live 簽署憑證之內部權杖驗證的詳細資訊,請參閱內部權杖標頭和簽章驗證

識別權杖中的正確使用者

權杖會包含在用戶端上建立權杖時,所有已主動登入之 XBOX Live 使用者的使用者身分識別。 因此,您的服務需要使用 HTTP 授權標頭中的使用者雜湊值,並在使用者身分識別中找到相符的 ush 值。 對於此範例權杖,Authorization 標頭的使用者雜湊為 18026470712427541036。 由此我們可以看到,宣告是針對此使用者雜湊,也就是玩家代號 2 Dev 079574836。 雖然此權杖在權杖宣告中只有一個使用者身分識別,我們仍應驗證它是否與標頭中的使用者雜湊相符。

另請參閱

XBOX 服務安全性權杖宣告 XBOX Live 安全性權杖範例 適用於遊戲服務的 XBOX 服務驗證
最後修改於 2026年10月8日