Nasıl yapılır: ADAL kimlik doğrulamasını kullanma

Önemli

Mart 2020'den önce yayımlanan Microsoft Rights Management Service SDK sürümleri kullanım dışı bırakılmıştır; önceki sürümleri kullanan uygulamaların Mart 2020 sürümünü kullanacak şekilde güncelleştirilmiş olması gerekir. Tüm ayrıntılar için kullanımdan kaldırma bildirimine bakın.

Microsoft Rights Management Service SDK'sı için başka geliştirme planlanmıyor. Sınıflandırma, etiketleme ve koruma hizmetleri için Microsoft Bilgi Koruması SDK'sının benimsenmesini kesinlikle öneririz.

Azure Active Directory Authentication Library (ADAL) kullanarak uygulamanızda Azure RMS ile kimlik doğrulaması yapabilirsiniz.

Uygulamanızı Microsoft Online Oturum Açma Yardımcısı yerine ADAL kimlik doğrulaması kullanmak üzere güncelleştirdiğinizde siz ve müşterileriniz aşağıdakileri gerçekleştirebilirsiniz:

  • Çok faktörlü kimlik doğrulaması kullanma
  • Makine için yönetici ayrıcalıklarına gerek duymadan RMS 2.1 istemcisini yükleme
  • Uygulama için Windows 10 onayı alma

Kimlik doğrulamasına iki yaklaşım

Bu konuda, kimlik doğrulamasına iki yaklaşım ilgili kod örnekleriyle birlikte açıklanmaktadır.

  • İç kimlik doğrulaması - RMS SDK tarafından yönetilen OAuth kimlik doğrulaması.

    Kimlik doğrulaması gerekli olduğunda RMS istemcisinin bir ADAL kimlik doğrulama istemi görüntülemesini istiyorsanız bu yaklaşımı kullanın. Uygulamanızı yapılandırma hakkında ayrıntılı bilgiler için "İç kimlik doğrulaması" bölümüne bakın.

    Not

    Uygulamanız şu anda AD RMS SDK 2.1’i oturum açma yardımcısı ile kullanıyorsa, uygulama geçiş yolunuz olarak iç kimlik doğrulaması yöntemini kullanmanızı öneririz.

  • Dış kimlik doğrulaması - Uygulamanız tarafından yönetilen OAuth kimlik doğrulaması.

    Uygulamanızın kendi OAuth kimlik doğrulamasını yönetmesini istiyorsanız bu yaklaşımı kullanın. Bu yaklaşımda, kimlik doğrulaması gerekli olduğunda RMS istemcisi uygulama tanımlı bir geri çağırma kullanır. Ayrıntılı bir örnek için bu konunun sonundaki "Dış kimlik doğrulaması" bölümüne bakın.

    Not

    Dış kimlik doğrulaması, kullanıcı değiştirme yeteneği anlamına gelmez; RMS istemcisi, belirli bir RMS kiracısı için her zaman varsayılan kullanıcıyı kullanır.

İç kimlik doğrulaması

  1. Azure RMS’yi ADAL kimlik doğrulaması için yapılandırma konusundaki Azure yapılandırma adımlarını izleyin ve sonra aşağıdaki uygulama başlatma adımına dönün.
  2. Artık uygulamanızı RMS SDK 2.1 tarafından sağlanan iç ADAL kimlik doğrulamasını kullanacak şekilde yapılandırmaya hazırsınız.

RMS istemcinizi yapılandırmak için, IpcInitialize’ı çağırdıktan hemen sonra IpcSetGlobalProperty’ye bir çağrı ekleyin. Aşağıdaki kod parçacığını bir örnek olarak kullanabilirsiniz.

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
}

Dış Kimlik Doğrulama

Kendi kimlik doğrulama belirteçlerinizi nasıl yöneteceğinizi gösteren bir örnek olarak bu kodu kullanabilirsiniz.

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