Практическое руководство. Использование проверки подлинности 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.
Внутренняя проверка подлинности
- Выполните этапы настройки Azure в разделе Настройка Azure RMS для проверки подлинности ADAL, а затем вернитесь на следующий этап инициализации приложения.
- Теперь все готово к настройке приложения для использования внутренней проверки подлинности 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);
}