共用方式為


使用全像攝影遠端和 Windows Mixed Reality API 保護連線

請記住,如果您想要啟用連線安全性,則必須實作自訂遠端和播放機應用程式。 您可以使用提供的範例作為您自己應用程式的起點。

若要啟用安全性,請呼叫 ListenSecure() 而不是 Listen()ConnectSecure() 而不是 Connect() 建立遠端連線。

這些呼叫會要求您提供特定介面的實作,以提供及驗證安全性相關資訊:

  • 伺服器必須實作憑證提供者和驗證驗證程式
  • 用戶端必須實作驗證提供者和憑證驗證程式。

所有介面都有函式要求您採取動作,以接收回呼物件做為參數。 使用此物件,您可以輕鬆地實作要求的非同步處理。 保留這個物件的參考,並在非同步動作完成時呼叫完成函式。 完成函式可以從任何執行緒呼叫。

提示

使用 C++/WinRT 可以輕鬆地實作 WinRT 介面。 使用 C++/WinRT 撰寫 API一章會詳細說明這一點。

重要

build\native\include\HolographicAppRemoting\Microsoft.Holographic.AppRemoting.idlNuGet 套件內的 包含與安全連線相關的 API 詳細檔。

實作憑證提供者

憑證提供者會提供伺服器應用程式與要使用的憑證。 實作包含兩個部分:

  1. 可實作 介面的 ICertificate 憑證物件:

    • GetCertificatePfx() 應該傳回憑證存放區的 PKCS#12 二進位內容。 檔案 .pfx 包含 PKCS#12 資料,因此可以直接在這裡使用其內容。
    • GetSubjectName() 應該傳回識別要使用的憑證的易記名稱。 如果未將易記名稱指派給憑證,此函式應該會傳回憑證的主體名稱。
    • GetPfxPassword() 如果不需要密碼,則應該傳回開啟憑證存放區 (或空字串所需的密碼) 。
  2. 實作 介面的 ICertificateProvider 憑證提供者:

    • GetCertificate() 應該建構憑證物件,並在回呼物件上呼叫 CertificateReceived() 來傳回憑證物件。

實作驗證驗證程式

驗證驗證程式會接收用戶端傳送的驗證權杖,並以驗證結果回應。

實作 IAuthenticationReceiver 介面,如下所示:

  • GetRealm() 應該 (遠端連線交握) 期間使用的 HTTP 領域,傳回驗證領域的名稱。
  • ValidateToken() 應該使用驗證結果來驗證用戶端驗證權杖,並在回呼物件上呼叫 ValidationCompleted()

實作驗證提供者

驗證提供者會產生或擷取要傳送至伺服器的驗證權杖。

實作 IAuthenticationProvider 介面,如下所示:

  • GetToken() 應該產生或擷取要傳送的驗證權杖。 權杖準備就緒之後,請在回呼物件上呼叫 TokenReceived() 方法。

實作憑證驗證程式

憑證驗證程式會接收伺服器所傳送的憑證鏈結,並判斷伺服器是否可以信任。

若要驗證憑證,您可以使用基礎系統的驗證邏輯。 此系統驗證可支援您自己的驗證邏輯,或完全取代。 如果您在要求安全連線時未通過自己的憑證驗證程式,系統驗證將會自動使用。

在 Windows 上,系統會驗證下列專案:

  • 憑證鏈結的完整性:憑證形成一致的鏈結,結尾為受信任的根憑證
  • 憑證有效性:伺服器的憑證在其有效時間範圍內,並針對伺服器驗證發出
  • 撤銷:尚未撤銷憑證
  • 名稱相符:伺服器的主機名稱符合憑證發行的其中一個主機名稱

實作 ICertificateValidator 介面,如下所示:

  • PerformSystemValidation() 如果應該執行上述的系統驗證,則應該傳回 true 。 在此情況下,系統會將系統驗證結果當做輸入傳遞至 ValidateCertificate() 方法。
  • ValidateCertificate() 應該驗證憑證鏈結,然後使用最終驗證結果在傳遞的回呼上呼叫 CertificateValidated() 。 這個方法會接受憑證鏈結、用來建立連線的伺服器名稱,以及是否應該強制撤銷檢查。 如果憑證鏈結包含多個憑證,則第一個憑證是主體憑證。

注意

如果您的使用案例需要不同類型的驗證, (請參閱上述憑證使用案例 #1) ,請完全略過系統驗證。 請改用任何可處理 DER 編碼 X.509 憑證的 API 或程式庫來解碼憑證鏈結,並執行您的使用案例所需的檢查。

另請參閱