home start up prev next

9.3. Пользовательская внешняя аутентификация VRDP

Как описано в Разделе 7.4.4, “RDP authentication” , VirtualBox поддерживает произвольные внешние модули для выполнения аутентификации для VRDP сервера. Когда метод аутентификации устанавливается как "external" для указанной ВМ, VirtualBox использует библиотеку которая была указана в команде VBoxManage setproperty vrdpauthlibrary . Эта библиотека загружается процессом ВМ по требованию, т.е. ее загрузка происходит при первом соединении RDP внешнего клиента.

Внешняя аутентификация является более расширяемым, т.к. внешний обработчик может предоставить оба метода доступа: всем(наподобие "null" аутентификации) и делегировать запрос аутентификации гостевой системе. Когда запрос аутентификации передается гостевой компоненте, то существует возможность отменить результат гостевой аутентификации.

В библиотеке VRDP аутентификации требует реализации только одной точки (функции) входа:

#include "VRDPAuth.h"

/**
 * Authentication library entry point. Decides whether to allow
 * a client connection.
 *
 * Parameters:
 *
 *   pUuid            Pointer to the UUID of the virtual machine
 *                    which the client connected to.
 *   guestJudgement   Result of the guest authentication.
 *   szUser           User name passed in by the client (UTF8).
 *   szPassword       Password passed in by the client (UTF8).
 *   szDomain         Domain passed in by the client (UTF8).
 *
 * Return code:
 *
 *   VRDPAuthAccessDenied    Client access has been denied.
 *   VRDPAuthAccessGranted   Client has the right to use the
 *                           virtual machine.
 *   VRDPAuthDelegateToGuest Guest operating system must
 *                           authenticate the client and the
 *                           library must be called again with
 *                           the result of the guest
 *                           authentication.
 */
VRDPAuthResult VRDPAUTHCALL VRDPAuth(
    PVRDPAUTHUUID pUuid,
    VRDPAuthGuestJudgement guestJudgement,
    const char *szUser,
    const char *szPassword
    const char *szDomain)
{
    /* process request against your authentication source of choice */
    return VRDPAuthAccessGranted;
}

Примечания на счет первого аргумента UUID : VirtualBox использует для хранения UUID в формате двоичных данных для всех платформ. По этой причине целочисленные значения из которых состоит UUID сохраняются в виде прямого порядка байт. Если вам необходимо передать такой UUID в коде программы, в формате которого целочисленные поля хранятся в обратном порядке следования байт (often also called network byte order), то вам необходимо изменить этот порядок, чтобы получить нужное его строковое представление. Для этого требуется:

Использование этого преобразования позволит вам получить нужный результат при конвертировании бинарного представления UUID в строковое представление.

Второй аргумент содержит информацию о состоянии гостевой аутентификации. При первом вызове его всегда необходимо установить в значение VRDPAuthGuestNotAsked . В случае если функция вернет значение VRDPAuthDelegateToGuest будет предпринята попытка гостевой аутентификации и последующий вызов вернет ее результат. Результат принимает значение granted (разрешено)/ denied (запрещено) или no judgement (неопределенно) (компонент гостевой аутентификации по какой то причине не смог принять решение). В случае если есть проблемы с модулем гостевой аутентификацией (например дополнения не установлены или гостевая система не отвечает), будет возвращено значение "not reacted".

home start up prev next
Сайт создан в системе uCoz