Поделиться через


Практическое руководство. Использование проверки подлинности ADAL

Важно!

Версии пакета SDK службы microsoft Rights Management, выпущенные до марта 2020 г., устарели; для использования выпуска за март 2020 г. необходимо обновить приложения, использующие более ранние версии. Полные сведения см. в уведомлении об устаревании.

Для пакета SDK службы Microsoft Rights Management не планируется никаких дополнительных улучшений. Мы настоятельно рекомендуем внедрить пакет SDK Microsoft Information Protection для классификации, маркировки и защиты.

Проверка подлинности с помощью Azure RMS для приложения с использованием библиотеки проверки подлинности Azure Active Directory (ADAL).

После добавления в приложение проверки подлинности ADAL, которая заменяет помощник по входу в Microsoft Online, вы и ваши клиенты смогут:

  • Использовать многофакторную проверку подлинности.
  • Устанавливать клиент RMS 2.1 без прав администратора на компьютере.
  • Сертифицировать приложения для Windows 10.

Два подхода к проверке подлинности

Эта статья описывает два подхода к проверке подлинности и содержит соответствующие примеры кода.

  • Внутренняя проверка подлинности — проверка подлинности OAuth, управляемая пакетом SDK RMS.

    Используйте этот подход, чтобы клиент RMS отображал запрос на проверку подлинности ADAL, когда требуется проверка подлинности . Дополнительные сведения о настройке приложения см. в разделе "Внутренняя проверка подлинности".

    Примечание

    Если ваше приложение использует SDK 2.1 AD RMS с помощником по входу, рекомендуется использовать в качестве пути миграции метод внутренней проверки подлинности.

  • Внешняя проверка подлинности — проверка подлинности OAuth, управляемая вашим приложением.

    Используйте этот подход, чтобы ваше приложение самостоятельно управляло своей проверкой подлинности OAuth. В этом случае, когда требуется проверка подлинности, клиент RMS выполняет определенный в приложении обратный вызов. Подробный пример см. в разделе "Внешняя проверка подлинности" в конце этой статьи.

    Примечание

    Внешняя проверка подлинности не предусматривает возможность изменения пользователей — клиент RMS всегда использует пользователя по умолчанию для заданного клиента RMS.

Внутренняя проверка подлинности

  1. Выполните этапы настройки Azure в разделе Настройка Azure RMS для проверки подлинности ADAL, а затем вернитесь на следующий этап инициализации приложения.
  2. Теперь все готово к настройке приложения для использования внутренней проверки подлинности ADAL, предоставляемой SDK 2.1 RMS.

Чтобы настроить клиент RMS, добавьте вызов IpcSetGlobalProperty сразу после вызова IpcInitialize. Используйте приведенный ниже фрагмент кода в качестве примера.

IpcInitialize();

IPC_AAD_APPLICATION_ID applicationId = { 0 };
applicationId.cbSize = sizeof(IPC_AAD_APPLICATION_ID);
applicationId.wszClientId = L"GUID-provided-by-AAD-for-your-app-(no-brackets)";
applicationId.wszRedirectUri = L"RedirectionUriWeProvidedAADForOurApp://authorize";
HRESULT hr = IpcSetGlobalProperty(IPC_EI_APPLICATION_ID, &applicationId);
if (FAILED(hr)) {
  //Handle the error
}

Внешняя проверка подлинности

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

extern HRESULT GetADALToken(LPVOID pContext, const IPC_NAME_VALUE_LIST& Parameters, __out wstring wstrToken) throw();

HRESULT GetLicenseKey(PCIPC_BUFFER pvLicense, __in LPVOID pContextForAdal, __out IPC_KEY_HANDLE &hKey)
{
    IPC_OAUTH2_CALLBACK pfGetADALToken =
    [](LPVOID pvContext, PIPC_NAME_VALUE_LIST pParameters, IPC_AUTH_TOKEN_HANDLE* phAuthToken) -> HRESULT
    {
        wstring wstrToken;
        HRESULT hr = GetADALToken(pvContext, *pParameters, wstrToken);
        return SUCCEEDED(hr) ? IpcCreateOAuth2Token(wstrToken.c_str(), OUT phAuthToken) : hr;
    };

    IPC_OAUTH2_CALLBACK_INFO callbackCredentialContext =
    {
        sizeof(IPC_OAUTH2_CALLBACK_INFO),
        pfGetADALToken,
        pContextForAdal
    };

    IPC_CREDENTIAL credentialContext =
    {
        IPC_CREDENTIAL_TYPE_OAUTH2,
        NULL
    };
    credentialContext.pcOAuth2 = &callbackCredentialContext;

    IPC_PROMPT_CTX promptContext =
    {
        sizeof(IPC_PROMPT_CTX),
        NULL,
        IPC_PROMPT_FLAG_SILENT | IPC_PROMPT_FLAG_HAS_USER_CONSENT,
        NULL,
        &credentialContext
    };

    hKey = 0L;
    return IpcGetKey(pvLicense, 0, &promptContext, NULL, &hKey);
}