> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 安全的 Web 要求與 WebSocket

> GDK 遊戲中 HTTPS 和 WebSocket 通訊的建議 API、驗證和 TLS 設定。

<Note>
  這些最佳做法僅作為範例參考。請自行獨立評估您的實作。
</Note>

## XBOX 服務通訊

使用 **XBOX Services API (XSAPI)** 進行 XBOX 服務呼叫。它建置於平台 HTTP 和 WebSocket API 之上，遵循所有建議的安全性做法，並可在多個平台上使用。

請參閱[開始使用 XBOX Services API](/zh-TW/services/xbox-services/fundamentals/xbox-services-api/live-gs-xbl-apis)。

## PlayFab 服務通訊

使用 **PlayFab XplatCPP GDK 程式庫**。它遵循建議的安全性做法 (包括驗證)，並建置於平台 HTTP 和 WebSocket API 之上。

請參閱[私人 Azure PlayFab GDK 程式庫](https://github.com/PlayFab/xplatcppsdk-private-gdk)和 [XplatCPP SDK 文件](/zh-TW/services/playfab/sdks/playfab-sdk-intro)。

## 一般 Web 服務通訊

在 GDK 上請使用 **XCurl**、**libHttpClient** 或 **WinHTTP**。Microsoft 會主動測試並維護這些程式庫。

* XCurl 會自動強制執行完整的 SSL 憑證驗證。
* libHttpClient 最適合用於 WebSocket 通訊。
* 一律使用 HTTPS / WSS。僅限使用 **TLS 1.2 或 1.3**。

請參閱 [Web 要求概觀](/zh-TW/build/console-features/networking/web-requests/http-networking)。

<Warning>
  請避免使用協力廠商 HTTP 或 WebSocket 用戶端程式庫。GDK 減少了對系統憑證存放區的 API 存取，而遊戲沙箱化會進一步限制存取。主機會將憑證存放區作業限制為唯讀。協力廠商程式庫本質上比平台 API 更不安全。
</Warning>

## Web 服務驗證

使用以平台認可之 CA 為根的公用 SSL 憑證來驗證 Web 服務。請參閱 [Microsoft 信任的根參與者](https://learn.microsoft.com/security/trusted-root/participants-list)。

WinHTTP / XCurl 會自動驗證憑證。自我簽署或不支援 CA 的憑證會導致驗證錯誤。在開發期間，您可以覆寫或減少這些檢查，但**絕對不要在發行組建中隨附這些變更**。

## HTTP 堆疊最佳做法

如果您的遊戲直接使用 WinHTTP 或其他 HTTP 堆疊而非 xCurl，請明確設定安全性，因為 xCurl 的預設值在其他地方不會自動套用。

### 憑證驗證與信任

* 驗證完整的憑證鏈結。
* 驗證伺服器**主機名稱**，而不只是簽發者。
* 決定堆疊要使用平台信任模型，還是另外管理的信任套件組合。

載入 Fiddler 類型的偵錯根憑證是在您的堆疊中的明確動作。

### Proxy 設定

* 在適當時探索系統 Proxy 設定。
* 將 Proxy 設定明確傳遞給 HTTP 程式庫。
* 測試直接和透過 Proxy 的流量 (特別是本機偵錯時)。

如需非 Schannel 堆疊的 XBOX Proxy 處理方式，請參閱[偵錯自訂 HTTP 堆疊](/zh-TW/build/console-features/networking/web-requests/debugging-custom-http-stacks)。

### 要檢閱的安全預設值

* 連線和要求逾時
* 重新導向處理
* 要求 / 回應大小限制
* HTTP 版本行為 (包括 HTTP/2 假設)
* 標頭、權杖和 URL 的記錄與遙測遮蔽

### 建議的檢查清單

* 生產環境流量為 HTTPS 或 WSS。
* 發行組建中已開啟憑證鏈結和主機名稱驗證。
* 已決定並記錄信任模型。
* 支援 Proxy 探索 / 明確設定，以利偵錯工作流程。
* 已刻意測試憑證失敗、Proxy 失敗和逾時行為 (而不只是正常路徑)。

## 用戶端驗證

使用 **XSTS 驗證權杖**驗證 GDK 用戶端。XBOX 服務會建立權杖，並提供使用者、用戶端和權限宣告。當 XSTS 權杖可以被安全驗證時，用戶端可以使用它們來呼叫遊戲服務。

指引：

* 在 Partner Center 中將 XSTS 驗證宣告設定為遊戲/服務設定的一部分。
* 不要直接從用戶端傳送使用者/用戶端/權限資訊 (URL 或本文)。一律透過 XSTS 宣告進行驗證。
* 允許使用遊戲/發行者的自訂權杖，但必須以初始的 XSTS 驗證流程為基礎。請遵循 XSTS 使用的加密 JWT 格式和到期時間。

如需 XSTS 驗證，請參閱 [XBOX services 驗證](/zh-TW/services/xbox-services/fundamentals/s2s-auth-calls/service-authentication/live-title-service-authentication)和 `GameService` 範例。

## Web 服務的演算法設定

將 TLS 限制為僅使用強式選項：

* **AES256 或更強**
* **CBC 或 GCM 加密**
* **SHA256 或更強**

AES256 在新式 CPU 上具有硬體加速。其他選項有已知的弱點。

WinHTTP / XCurl 會對所有 SSL 憑證 (包括自我簽署憑證) 強制執行 SHA256 (或更高)。請參閱 [Windows 對 SHA1 憑證的強制執行](https://social.technet.microsoft.com/wiki/contents/articles/32288.windows-enforcement-of-sha1-certificates.aspx)。

### SSL 憑證產生

根憑證應為下列其中之一：

* 鏈結至 [Microsoft 信任的根計畫](https://learn.microsoft.com/security/trusted-root/participants-list)參與者的 CA。不需要針對每個遊戲進行設定。
* Microsoft CA (包括 Azure VM 和服務中使用的 Azure 憑證)。

免費和付費的憑證選項都有，請選擇適合的。

## 相關 API 文件

* [XCurl API 參考](/zh-TW/reference/networking/xcurl/functions/xcurl_global_init_mem)：TLS 選項、僅限 HTTPS 的強制執行、憑證關聯攔截點
* [libHttpClient 參考](/zh-TW/reference/live/httpclient/httpclient/httpclient_members)：XSAPI 底層的 HTTPS/WebSocket 傳輸
  - [XSAPI REST 參考](/zh-TW/reference/live/rest/atoc-xboxlivews-reference)：經 XSTS 驗證的 Web 要求
* [XUser 參考](/zh-TW/reference/system/xuser/xuser_members)：用於已驗證 Web 要求的 `XUserGetTokenAndSignatureAsync`

## 另請參閱

* [Web 要求概觀](/zh-TW/build/console-features/networking/web-requests/http-networking)
* [XCurl (GDK 概念)](/zh-TW/build/console-features/networking/web-requests/intro-xcurl)
* [WinHTTP (GDK 概念)](/zh-TW/build/console-features/networking/web-requests/intro-winhttp)
* [通訊安全性概觀](/zh-TW/build/game-principles/security/communication-security-overview)


## Related topics

- [Web 请求](/zh-CN/build/console-features/networking/web-requests/web-requests-toc.md)
- [HTTP and WebSocket web requests in the GDK](/build/console-features/networking/web-requests/http-networking.md)
- [HCWebSocketCreate](/reference/live/httpclient/httpclient/functions/hcwebsocketcreate.md)
- [HCGetWebSocketFunctions](/reference/live/httpclient/httpprovider/functions/hcgetwebsocketfunctions.md)
- [HCWebSocketDisconnect](/reference/live/httpclient/httpclient/functions/hcwebsocketdisconnect.md)
