Zabezpečené připojení pomocí holografické vzdálené komunikace a rozhraní API Windows Mixed Reality

Nezapomeňte, že pokud chcete povolit zabezpečení připojení, musíte implementovat vlastní vzdálené aplikace a aplikace přehrávače. Poskytnuté ukázky můžete použít jako výchozí body pro vaše vlastní aplikace.

Pokud chcete povolit zabezpečení, zavolejte ListenSecure() místo Listen()příkazu a ConnectSecure() místo Connect() navázání připojení vzdálené komunikace.

Tato volání vyžadují, abyste zadali implementace určitých rozhraní pro poskytování a ověřování informací týkajících se zabezpečení:

  • Server musí implementovat zprostředkovatele certifikátů a validátor ověřování.
  • Klient musí implementovat zprostředkovatele ověřování a validátor certifikátů.

Všechna rozhraní mají funkci, která vyžaduje provedení akce, která přijímá objekt zpětného volání jako parametr. Pomocí tohoto objektu můžete snadno implementovat asynchronní zpracování požadavku. Ponechte odkaz na tento objekt a po dokončení asynchronní akce zavolejte funkci dokončení. Funkci dokončování lze volat z libovolného vlákna.

Tip

Implementaci rozhraní WinRT lze snadno provést pomocí C++/WinRT. Podrobně to popisuje kapitola Author API with C++/WinRT .

Důležité

V build\native\include\HolographicAppRemoting\Microsoft.Holographic.AppRemoting.idl balíčku NuGet najdete podrobnou dokumentaci k rozhraní API souvisejícím se zabezpečenými připojeními.

Implementace zprostředkovatele certifikátů

Zprostředkovatelé certifikátů dodají serverové aplikaci certifikát, který se má použít. Implementace se skládá ze dvou částí:

  1. Objekt certifikátu, který implementuje ICertificate rozhraní:

    • GetCertificatePfx() by měl vrátit binární obsah PKCS#12 úložiště certifikátů. Soubor .pfx obsahuje PKCS#12 data, takže jeho obsah můžete použít přímo tady.
    • GetSubjectName() by měl vrátit popisný název, který identifikuje certifikát, který se má použít. Pokud certifikátu není přiřazen popisný název, měla by tato funkce vrátit název subjektu certifikátu.
    • GetPfxPassword() by měl vrátit heslo potřebné k otevření úložiště certifikátů (nebo prázdný řetězec, pokud se heslo nevyžaduje).
  2. Zprostředkovatel certifikátu implementuje ICertificateProvider rozhraní:

    • GetCertificate() by měl vytvořit objekt certifikátu a vrátit ho voláním CertificateReceived() objektu zpětného volání.

Implementace validátoru ověřování

Ověřovací validátory obdrží ověřovací token odeslaný klientem a vrátí odpověď s výsledkem ověření.

IAuthenticationReceiver Implementujte rozhraní následujícím způsobem:

  • GetRealm() by měl vrátit název sféry ověřování (sféra HTTP používaná při handshakeu vzdálené komunikace připojení).
  • ValidateToken() by měl ověřit ověřovací token klienta a volat ValidationCompleted() na objekt zpětného volání s výsledkem ověření.

Implementace zprostředkovatele ověřování

Zprostředkovatelé ověřování vygenerují nebo načítají ověřovací token, který se má odeslat na server.

IAuthenticationProvider Implementujte rozhraní následujícím způsobem:

  • GetToken() by měl vygenerovat nebo načíst ověřovací token, který se má odeslat. Jakmile je token připravený, zavolejte metodu TokenReceived() pro objekt zpětného volání.

Implementace validátoru certifikátů

Validátory certifikátů obdrží řetěz certifikátů odeslaný serverem a určí, zda lze serveru důvěřovat.

K ověření certifikátů můžete použít logiku ověřování základního systému. Toto ověření systému může buď podporovat vlastní logiku ověřování, nebo ji úplně nahradit. Pokud při žádosti o zabezpečené připojení neprojdete vlastním validátorem certifikátu, použije se automaticky ověření systému.

V systému Windows ověření systému zkontroluje:

  • Integrita řetězu certifikátů: Certifikáty tvoří konzistentní řetěz, který končí důvěryhodným kořenovým certifikátem.
  • Platnost certifikátu: Certifikát serveru je v časovém rozsahu platnosti a je vystaven pro ověřování serveru.
  • Odvolání: Certifikát se neodvolal.
  • Shoda názvu: Název hostitele serveru odpovídá jednomu z názvů hostitelů, pro který byl certifikát vystaven.

ICertificateValidator Implementujte rozhraní následujícím způsobem:

  • PerformSystemValidation() by měl vrátit true , pokud by mělo být provedeno ověření systému popsané výše. V tomto případě se výsledek ověření systému předá jako vstup metodě ValidateCertificate() .
  • ValidateCertificate() by měl ověřit řetěz certifikátů a pak volat CertificateValidated() na předané zpětné volání s konečným výsledkem ověření. Tato metoda přijímá řetěz certifikátů, název serveru, se kterým se vytváří připojení, a to, jestli má být vynucena kontrola odvolání. Pokud řetěz certifikátů obsahuje více certifikátů, prvním z nich je předmětný certifikát.

Poznámka

Pokud váš případ použití vyžaduje jinou formu ověření (viz případ použití certifikátu č. 1 výše), zcela vynechejte ověření systému. Místo toho použijte libovolné rozhraní API nebo knihovnu, které mohou zpracovávat certifikáty X.509 s kódováním DER, k dekódování řetězu certifikátů a provádění kontrol potřebných pro váš případ použití.

Viz také