Biztonságos kapcsolat a Holographic Remoting és az OpenXR API használatával
Az OpenXR API használatakor minden biztonságos kapcsolattal kapcsolatos API elérhető az XR_MSFT_holographic_remoting
OpenXR-bővítmény részeként.
Fontos
A Holographic Remoting OpenXR bővítmény API-val kapcsolatos információkért tekintse meg a Holographic Remoting samples github-adattárban található specifikációt.
Ne feledje, hogy egyéni távoli és lejátszóalkalmazásokat kell implementálnia, ha engedélyezni szeretné a kapcsolatbiztonságot. Mindkét egyéni alkalmazásnak szüksége van a következőkre:
- Tanúsítványszolgáltató és hitelesítés-érvényesítő, ha az alkalmazás kiszolgálóként fut.
- Hitelesítési szolgáltató és tanúsítvány-érvényesítő, ha az alkalmazás ügyfélként fut.
Az OpenXR API hasonló az itt leírt Windows Mixed Reality API-hoz.
Az interfészek implementálása helyett azonban az OpenXR-bővítményt használó XR_MSFT_holographic_remoting
biztonságos kapcsolat legfontosabb elemei a következő visszahívások:
-
xrRemotingRequestAuthenticationTokenCallbackMSFT
, létrehozza vagy lekéri az elküldendő hitelesítési jogkivonatot. -
xrRemotingValidateServerCertificateCallbackMSFT
, ellenőrzi a tanúsítványláncot. -
xrRemotingValidateAuthenticationTokenCallbackMSFT
, ellenőrzi az ügyfél-hitelesítési jogkivonatot. -
xrRemotingRequestServerCertificateCallbackMSFT
, adja meg a kiszolgálóalkalmazásnak a használni kívánt tanúsítványt.
Megjegyzés
A Holographic Remoting használatával lehetséges, hogy a lejátszó vagy a távoli kiszolgáló az igényeitől függően (további információ: Holographic Remoting Terminológia). Ha az egyéni távoli vagy egyéni lejátszóalkalmazás ügyfélként és kiszolgálóként is futtatható, az alkalmazásnak mind a négy visszahívást meg kell adnia.
A visszahívások a és xrRemotingSetSecureConnectionServerCallbacksMSFT
a használatával biztosíthatók az OpenXR-futtatókörnyezet xrRemotingSetSecureConnectionClientCallbacksMSFT
újraegyesítéséhez.
Ehhez statikus függvényeket hozhat létre a visszahívásokhoz:
class SecureConnectionCallbacks {
public:
...
// Static callbacks
static XrResult XRAPI_CALL
RequestAuthenticationTokenStaticCallback(XrRemotingAuthenticationTokenRequestMSFT* authenticationTokenRequest) {
if (!authenticationTokenRequest->context) {
return XR_ERROR_RUNTIME_FAILURE;
}
return reinterpret_cast<SecureConnectionCallbacks*>(authenticationTokenRequest->context)
->RequestAuthenticationToken(authenticationTokenRequest);
}
static XrResult XRAPI_CALL
ValidateServerCertificateStaticCallback(XrRemotingServerCertificateValidationMSFT* serverCertificateValidation) {
if (!serverCertificateValidation->context) {
return XR_ERROR_RUNTIME_FAILURE;
}
return reinterpret_cast<SecureConnectionCallbacks*>(serverCertificateValidation->context)
->ValidateServerCertificate(serverCertificateValidation);
}
static XrResult XRAPI_CALL
ValidateAuthenticationTokenStaticCallback(XrRemotingAuthenticationTokenValidationMSFT* authenticationTokenValidation) {
if (!authenticationTokenValidation->context) {
return XR_ERROR_RUNTIME_FAILURE;
}
return reinterpret_cast<SecureConnectionCallbacks*>(authenticationTokenValidation->context)
->ValidateAuthenticationToken(authenticationTokenValidation);
}
static XrResult XRAPI_CALL
RequestServerCertificateStaticCallback(XrRemotingServerCertificateRequestMSFT* serverCertificateRequest) {
if (!serverCertificateRequest->context) {
return XR_ERROR_RUNTIME_FAILURE;
}
return reinterpret_cast<SecureConnectionCallbacks*>(serverCertificateRequest->context)
->RequestServerCertificate(serverCertificateRequest);
}
}
A statikus visszahívási függvények mind hasonlóak, és a fenti példában csak meghívnak egy függvényt a környezeti objektumon, amely a vagy xrRemotingSetSecureConnectionServerCallbacksMSFT
a értékben xrRemotingSetSecureConnectionClientCallbacksMSFT
van beállítva. A visszahívások tényleges megvalósítása ezután a környezeti objektum tagfüggvényei között történik:
class SecureConnectionCallbacks {
...
private:
// The client has to provide a token and has to validate the certificate.
XrResult RequestAuthenticationToken(XrRemotingAuthenticationTokenRequestMSFT* authenticationTokenRequest) {
// To provide a token fill out the authenticationTokenRequest with your token.
}
XrResult ValidateServerCertificate(XrRemotingServerCertificateValidationMSFT* serverCertificateValidation) {
// Validate the certificate.
}
// The server has to provide a certificate and hast to validate the token.
XrResult ValidateAuthenticationToken(XrRemotingAuthenticationTokenValidationMSFT* authenticationTokenValidation) {
// Validate the token.
}
XrResult RequestServerCertificate(XrRemotingServerCertificateRequestMSFT* serverCertificateRequest) {
// To provide a certificate fill out the serverCertificateRequest with your certificate.
}
}
Most már megadhatja a és a visszahívásokat xrRemotingSetSecureConnectionClientCallbacksMSFT
xrRemotingSetSecureConnectionServerCallbacksMSFT
. Emellett a biztonságos kapcsolatot a secureConnection paraméterrel kell engedélyezni a struktúrán vagy a XrRemotingConnectInfoMSFT
XrRemotingListenInfoMSFT
struktúrán, attól függően, hogy használja-e xrRemotingConnectMSFT
vagy xrRemotingListenMSFT
:
...
SecureConnectionCallbacks callbackObject;
...
if (client)
{
XrRemotingSecureConnectionClientCallbacksMSFT clientCallbacks{static_cast<XrStructureType>(XR_TYPE_REMOTING_SECURE_CONNECTION_CLIENT_CALLBACKS_MSFT);
clientCallbacks.context = &callbackObject;
clientCallbacks.requestAuthenticationTokenCallback = SecureConnectionCallbacks::RequestAuthenticationTokenStaticCallback;
clientCallbacks.validateServerCertificateCallback = SecureConnectionCallbacks::ValidateServerCertificateStaticCallback;
clientCallbacks.performSystemValidation = true;
CHECK_XRCMD(m_extensions.xrRemotingSetSecureConnectionClientCallbacksMSFT(m_instance.Get(), m_systemId, &clientCallbacks));
...
connectInfo.secureConnection = true; // Enable secure connection!
CHECK_XRCMD(m_extensions.xrRemotingConnectMSFT(m_instance.Get(), m_systemId, &connectInfo));
}
if (server)
{
XrRemotingSecureConnectionServerCallbacksMSFT serverCallbacks{static_cast<XrStructureType>(XR_TYPE_REMOTING_SECURE_CONNECTION_SERVER_CALLBACKS_MSFT);
serverCallbacks.context = &callbackObject;
serverCallbacks.requestServerCertificateCallback = SecureConnectionCallbacks::RequestServerCertificateStaticCallback;
serverCallbacks.validateAuthenticationTokenCallback = SecureConnectionCallbacks::ValidateAuthenticationTokenStaticCallback;
serverCallbacks.authenticationRealm = /*YourAuthenticationRealm*/;
CHECK_XRCMD(m_extensions.xrRemotingSetSecureConnectionServerCallbacksMSFT(m_instance.Get(), m_systemId, &serverCallbacks));
...
listenInfo.secureConnection = true; // Enable secure connection!
CHECK_XRCMD(m_extensions.xrRemotingListenMSFT(m_instance.Get(), m_systemId, &listenInfo));
}
Megjegyzés
Részletes példát az OpenXR mintaalkalmazásban talál.