Dela via


Anvisningar: Använda ADAL-autentisering

Viktigt

Versioner av Microsoft Rights Management Service SDK som släpptes före mars 2020 är inaktuella. program som använder tidigare versioner måste uppdateras för att använda versionen från mars 2020. Fullständig information finns i utfasningsmeddelandet.

Inga ytterligare förbättringar planeras för Microsoft Rights Management Service SDK. Vi rekommenderar starkt att du använder Microsoft Information Protection SDK för klassificerings-, märknings- och skyddstjänster.

Autentisering med Azure RMS för ditt program med ADAL-bibliotek (Azure Active Directory Authentication Library).

Genom att uppdatera programmet så att ADAL-autentisering används i stället för inloggningsassistenten för Microsoft Online kan du och dina kunder göra följande:

  • Använda multifaktorautentisering
  • Installera RMS 2.1-klienten utan administratörsbehörighet för datorn
  • Certifiera ett program för Windows 10

Två autentiseringsmetoder

I det här avsnittet beskrivs två metoder för autentisering med motsvarande kodexempel.

  • Intern autentisering – OAuth-autentisering som hanteras av RMS SDK.

    Använd den här metoden om du vill att RMS-klienten ska visa en uppmaning om ADAL-autentisering när autentisering krävs. Mer information om hur du konfigurerar programmet finns i avsnittet ”Intern autentisering”.

    Anteckning

    Om AD RMS SDK 2.1 med inloggningsassistenten används för programmet för närvarande, rekommenderar vi att du använder den interna autentiseringsmetoden som sökväg för programmigreringen.

  • Extern autentisering – OAuth-autentisering som hanteras av programmet.

    Använd den här metoden om du vill att programmet ha en OAuth-autentisering. Med den här metoden tillämpar RMS-klienten ett programdefinierat återanrop om autentisering krävs. Ett detaljerat exempel finns under rubriken ”Extern autentisering” i slutet av det här avsnittet.

    Anteckning

    Extern autentisering innebär inte möjligheten att byta användare; RMS-klienten använder alltid standardanvändaren för en viss RMS-klient.

Intern autentisering

  1. Följ konfigurationsstegen för Azure i Konfigurera Azure RMS för ADAL-autentisering och återgå sedan till följande programinitieringssteg.
  2. Du är nu redo att konfigurera programmet att använda den interna ADAL-autentisering som tillhandahålls av RMS SDK 2.1.

Om du vill konfigurera RMS-klienten lägger du till ett anrop till rättigheten IpcSetGlobalProperty direkt efter anropet IpcInitialize för konfigurering av RMS-klienten. Använd följande kodavsnitt som ett exempel.

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 autentisering

Använd den här koden som ett exempel på hur du hanterar dina egna autentiseringstoken.

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