Útmutató: az ADAL-hitelesítés használata
Fontos
A Microsoft Rights Management Service SDK 2020 márciusa előtt kiadott verziói elavultak; a korábbi verziókat használó alkalmazásokat frissíteni kell a 2020. márciusi kiadás használatához. A részletekért tekintse meg az elavulással kapcsolatos közleményt.
A Microsoft Rights Management Service SDK-hoz nem terveznek további fejlesztéseket. Határozottan javasoljuk a Microsoft-információvédelem SDK bevezetését besorolási, címkézési és védelmi szolgáltatásokhoz.
Hitelesítés az Azure RMS-sel az ADAL-hitelesítést (Azure Active Directory Authentication Library) használó alkalmazás esetén.
Az alkalmazásnak a Microsoft Online bejelentkezési segéd helyett az ADAL-hitelesítés használatára való frissítésével Ön és ügyfelei az alábbiakra lesznek képesek:
- Többtényezős hitelesítés használata.
- Az RMS 2.1 ügyfél telepítése rendszergazdai jogosultságok nélkül a számítógépen.
- Az alkalmazás tanúsítása a Windows 10-re.
A hitelesítési folyamat két megközelítése
Ez a témakör a hitelesítési folyamat két megközelítését ismerteti, a megfelelő programkódpéldákkal kiegészítve.
Belső hitelesítés – Az RMS SDK által kezelt OAuth-hitelesítés.
Ezt a megközelítést akkor használja, ha azt szeretné, hogy az RMS-ügyfél egy ADAL-hitelesítési üzenetet jelenítsen meg, ha hitelesítésre van szükség. Az alkalmazás konfigurálásával kapcsolatos további részleteket a „Belső hitelesítés” című szakaszban találja.
Megjegyzés
Ha az Ön alkalmazása jelenleg a bejelentkezési segéddel kiegészített AD RMS SDK 2.1-et használja, az alkalmazás áttelepítési útvonalaként a belső hitelesítési módszer használatát ajánljuk.
Külső hitelesítés – Az alkalmazás által kezelt OAuth-hitelesítés.
Ezt a megközelítést akkor használja, ha azt szeretné, hogy az alkalmazása kezelje az OAuth-hitelesítést. Ezzel a megközelítéssel az RMS-ügyfél egy, az alkalmazás által meghatározott visszahívást intéz, ha hitelesítésre van szükség. Részletes példákat a „Külső hitelesítés” című szakaszban talál, a jelen témakör végén.
Megjegyzés
A külső hitelesítés nem feltétlenül jelenti a felhasználóváltás lehetőségét is: az RMS-ügyfél ugyanis mindig az alapértelmezett felhasználót veszi alapul egy adott RMS-bérlő esetében.
Belső hitelesítés
- Konfigurálja az Azure-t Az Azure RMS beállítása az ADAL-hitelesítéshez című cikkben ismertetett lépésekkel, majd térjen vissza a következő alkalmazásinicializálási lépéshez.
- Ezt követően már készen áll alkalmazása az RMS SDK 2.1 által biztosított belső ADAL-hitelesítés használatához történő konfigurálására.
Az RMS-ügyfél konfigurálásához rögtön az IpcInitialize hívása után adjon hozzá egy IpcSetGlobalProperty hívást. A következő kódrészletet mintaként használhatja.
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
}
Külső hitelesítés
A saját hitelesítési jogkivonatok kezeléséhez az alábbi programkódot használhatja mintaként.
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);
}