Sdílet prostřednictvím


Postupy: Použití ověřování ADAL

Důležité

Verze sady MICROSOFT Rights Management Service SDK vydané před březnem 2020 jsou zastaralé; aplikace používající starší verze musí být aktualizovány tak, aby používaly verzi z března 2020. Úplné podrobnosti najdete v oznámení o vyřazení.

Pro sadu MICROSOFT Rights Management Service SDK se neplánují žádná další vylepšení. Důrazně doporučujeme přijmout sadu Microsoft Information Protection SDK pro klasifikaci, označování a služby ochrany.

Ověřování pomocí Azure RMS s využitím Azure Active Directory Authentication Library (ADAL).

Když si aplikaci aktualizujete, aby místo Pomocníka pro přihlášení ke službám Microsoft Online Services využívala ověřování pomocí knihovny ADAL, umožní to vašim zákazníkům:

  • Využívat vícefaktorové ověřování
  • Nainstalovat si klienta RMS 2.1 bez toho, aby na počítači museli mít oprávnění správce
  • Certifikovat aplikaci pro Windows 10

Dvě metody ověřování

V tomto tématu najdete informace o těchto dvou metodách ověřování s odpovídajícími příklady kódu.

  • Interní ověřování: Ověřování OAuth, které se spravuje přes sadu RMS SDK.

    Tuto metodu použijte, pokud chcete, aby v případě, že je nutné provést ověření, zobrazil klient RMS výzvu k ověření pomocí knihovny ADAL. Další informace o tom, jak si nakonfigurovat aplikaci, najdete v části Interní ověřování.

    Poznámka

    Pokud teď vaše aplikace používá AD RMS SDK 2.1 s pomocníkem pro přihlášení, doporučujeme používat metodu interního ověřování jako cestu migrace vaší aplikace.

  • Externí ověřování: Ověřování OAuth spravované vaší aplikací.

    Tuto metodu použijte, pokud chcete, aby vaše aplikace spravovala svoje vlastní ověřování OAuth. Při použití této metody bude klient RMS v případě, že je nutné provést ověření, provádět zpětné volání definované aplikací. Podrobný příklad najdete v tématu Externí ověřování na konci tohoto tématu.

    Poznámka

    Externí ověřování neznamená možnost měnit uživatele. Klient RMS vždy používá výchozího uživatele pro daného tenanta RMS.

Interní ověřování

  1. Postupujte podle kroků pro konfiguraci Azure v části Konfigurace Azure RMS pro ověřování ADAL a potom se vraťte k následujícímu inicializačnímu kroku.
  2. Teď si můžete aplikaci nakonfigurovat na používání interního ověřování přes ADAL, které zajišťuje sada RMS SDK 2.1.

Klienta RMS nakonfigurujete tak, že přidáte volání funkce IpcSetGlobalProperty hned po volání funkce IpcInitialize. Tady je příklad s fragmentem kódu.

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í ověřování

Tento kód použijte jako příklad pro správu vlastních tokenů ověřování.

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);
}