Bagikan melalui


Cara: menggunakan autentikasi ADAL

Penting

Versi SDK Layanan Manajemen Hak Microsoft yang dirilis sebelum Maret 2020 tidak digunakan lagi; aplikasi yang menggunakan versi sebelumnya harus diperbarui untuk menggunakan rilis Maret 2020. Untuk detail selengkapnya, lihat pemberitahuan penghentian.

Tidak ada penyempurnaan lebih lanjut yang direncanakan untuk SDK Layanan Manajemen Hak Microsoft. Kami sangat menyarankan adopsi SDK Microsoft Information Protection untuk layanan klasifikasi, pelabelan, dan perlindungan.

Autentikasi dengan Azure RMS untuk aplikasi Anda menggunakan Azure Active Directory Authentication Library (ADAL).

Dengan memperbarui aplikasi Anda untuk menggunakan autentikasi ADAL daripada Asisten Masuk Microsoft Online, Anda dan pelanggan Anda akan dapat:

  • Menggunakan autentikasi multifaktor
  • Instal klien RMS 2.1 tanpa memerlukan hak administratif ke komputer
  • Sertifikasi aplikasi Anda untuk Windows 10

Dua pendekatan untuk autentikasi

Topik ini berisi dua pendekatan untuk autentikasi dengan contoh kode yang sesuai.

  • Autentikasi internal - Autentikasi OAuth yang dikelola oleh RMS SDK.

    Gunakan pendekatan ini jika Anda ingin klien RMS menampilkan permintaan autentikasi ADAL saat autentikasi diperlukan. Untuk detail tentang cara mengonfigurasi aplikasi Anda, lihat bagian , "Autentikasi internal".

    Catatan

    Jika aplikasi Anda saat ini menggunakan AD RMS SDK 2.1 dengan asisten masuk, kami sarankan Anda menggunakan metode autentikasi internal sebagai jalur migrasi aplikasi Anda.

  • Autentikasi eksternal - Autentikasi OAuth yang dikelola oleh aplikasi Anda.

    Gunakan pendekatan ini jika Anda ingin aplikasi Anda mengelola autentikasi OAuth sendiri. Dengan pendekatan ini, klien RMS akan menjalankan panggilan balik yang ditentukan aplikasi saat autentikasi diperlukan. Untuk contoh terperinci, lihat "Autentikasi eksternal" di akhir topik ini.

    Catatan

    Autentikasi eksternal tidak menyiratkan kemampuan untuk mengubah pengguna; klien RMS selalu menggunakan pengguna default untuk penyewa RMS tertentu.

Autentikasi internal

  1. Ikuti langkah-langkah konfigurasi Azure di Mengonfigurasi Azure RMS untuk autentikasi ADAL lalu kembali ke langkah inisialisasi aplikasi berikut.
  2. Anda sekarang siap untuk mengonfigurasi aplikasi Anda untuk menggunakan autentikasi ADAL internal yang disediakan oleh RMS SDK 2.1.

Untuk mengonfigurasi klien RMS Anda, tambahkan panggilan ke IpcSetGlobalProperty tepat setelah memanggil IpcInitialize untuk mengonfigurasi klien RMS. Gunakan cuplikan kode berikut sebagai contoh.

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
}

Autentikasi Eksternal

Gunakan kode ini sebagai contoh cara mengelola token autentikasi Anda sendiri.

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