Holographic Uzaktan İletişim ve OpenXR API'siyle Güvenli Bağlantı
OpenXR API'sini kullanırken, bağlantıyla ilgili tüm güvenli API OpenXR uzantısının XR_MSFT_holographic_remoting
bir parçası olarak kullanılabilir.
Önemli
Holographic Remoting OpenXR uzantı API'sini öğrenmek için Holographic Remoting örnekleri github deposunda bulunan belirtimlere göz atın.
Bağlantı güvenliğini etkinleştirmek istiyorsanız özel uzak ve oynatıcı uygulamaları uygulamanız gerektiğini unutmayın. Her iki özel uygulamanın da ihtiyacı:
- Uygulama sunucu olarak çalışıyorsa bir sertifika sağlayıcısı ve kimlik doğrulama doğrulayıcısı.
- Uygulama istemci olarak çalışıyorsa bir kimlik doğrulama sağlayıcısı ve sertifika doğrulayıcı.
OpenXR API'si, burada açıklanan Windows Mixed Reality API'sine benzer.
Ancak, arabirimleri uygulamak yerine OpenXR uzantısını kullanarak güvenli bağlantı için XR_MSFT_holographic_remoting
temel öğeler aşağıdaki geri çağırmalardır:
xrRemotingRequestAuthenticationTokenCallbackMSFT
, gönderilecek kimlik doğrulama belirtecini oluşturur veya alır.xrRemotingValidateServerCertificateCallbackMSFT
, sertifika zincirini doğrular.xrRemotingValidateAuthenticationTokenCallbackMSFT
, istemci kimlik doğrulama belirtecini doğrular.xrRemotingRequestServerCertificateCallbackMSFT
, sunucu uygulamasına kullanılacak sertifikayı sağlayın.
Not
Holographic Remoting ile ihtiyaçlarınıza bağlı olarak Sunucu Oynatıcı veya Uzak sunucu olabilir (Daha fazla bilgi için bkz. Holographic Uzaktan İletişim Terminolojisi). Özel uzak veya özel oynatıcı uygulamanız istemci ve sunucu olarak çalıştırılabilirse uygulamanın dört geri çağırmanın tümünü sağlaması gerekir.
Geri çağırmalar ve xrRemotingSetSecureConnectionServerCallbacksMSFT
aracılığıyla xrRemotingSetSecureConnectionClientCallbacksMSFT
uzaktan iletişim OpenXR çalışma zamanına sağlanabilir.
Bunu yapmak için geri çağırmalar için statik işlevler oluşturabilirsiniz:
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);
}
}
Statik geri çağırma işlevlerinin tümü benzer görünür ve yukarıdaki örnekte yalnızca veya xrRemotingSetSecureConnectionServerCallbacksMSFT
içinde ayarlanan bağlam nesnesinde xrRemotingSetSecureConnectionClientCallbacksMSFT
bir işlev çağırırlar. Geri çağırmaların gerçek uygulaması daha sonra bağlam nesnesinin üye işlevlerinde gerçekleştirilir:
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.
}
}
Artık ve xrRemotingSetSecureConnectionServerCallbacksMSFT
için geri çağırmaları xrRemotingSetSecureConnectionClientCallbacksMSFT
sağlayabilirsiniz. Ayrıca, güvenli bağlantının, veya kullanıp kullanmadığınıza xrRemotingConnectMSFT
xrRemotingListenMSFT
bağlı olarak yapı veya XrRemotingListenInfoMSFT
yapı üzerindeki XrRemotingConnectInfoMSFT
secureConnection parametresi aracılığıyla etkinleştirilmesi gerekir:
...
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));
}
Not
Ayrıntılı bir örneği OpenXR örnek uygulamasında bulabilirsiniz.