方法: ADAL 認証の使用How-to: use ADAL authentication

Azure Active Directory Authentication Library (ADAL) を利用し、アプリに対して Azure RMS で認証を実行する。Authentication with Azure RMS for your app using Azure Active Directory Authentication Library (ADAL).

Microsoft Online サインイン アシスタントではなく、ADAL 認証を使用するようにアプリケーションを更新すると、ユーザーと顧客は以下を利用できるようになります。By updating your application to use ADAL authentication rather than the Microsoft Online Sign-in Assistant, you and your customers will be able to:

  • 多要素認証を使用するUtilize multi-factor authentication
  • コンピューターの管理者特権なしで RMS 2.1 クライアントをインストールするInstall the RMS 2.1 client without requiring administrative privileges to the machine
  • Windows 10 向けアプリケーションの認定Certify your application for Windows 10

2 つの認証方法Two approaches to authentication

このトピックでは、2 種類の認証方法とそれに対応するコード例を示します。This topic contains two approaches to authentication with corresponding code examples.

  • 内部認証 - RMS SDK によって管理された OAuth 認証。Internal authentication - OAuth authentication managed by the RMS SDK.

    認証が必要なときに RMS クライアントに ADAL 認証プロンプトを表示させる場合は、この方法を使用します。Use this approach if you want the RMS client to display an ADAL authentication prompt when authentication is necessary. アプリケーションの構成方法の詳細については、「内部認証」セクションを参照してください。For details on how to configure your application, see the section, "Internal authentication".

    注意

    現在、アプリケーションがサインイン アシスタント付きの AD RMS SDK 2.1 を使用している場合は、アプリケーション移行パスとして内部認証方法を使用することをお勧めします。If your application currently uses AD RMS SDK 2.1 with the sign-in assistant, we recommend that you use the internal authentication method as your application migration path.

  • 外部認証 - アプリケーションによって管理される OAuth 認証。External authentication - OAuth authentication managed by your application.

    アプリケーションで独自の OAuth 認証を管理する場合は、この方法を使用します。Use this approach if you want your application to manage its own OAuth authentication. この方法では、認証が必要なとき、RMS クライアントはアプリケーション定義のコールバックを実行します。With this approach, the RMS client will exercise an application defined callback when authentication is necessary. 詳細な例については、このトピックの最後の「外部認証」を参照してください。For a detailed example, see "External authentication" at the end of this topic.

    注意

    外部認証は、ユーザーを変更できるということではありません。RMS クライアントは、常に特定の RMS テナントの既定のユーザーを使用します。External authentication does not imply the ability to change users; the RMS client always uses the default user for a given RMS tenant.

内部認証Internal authentication

  1. Configure Azure RMS for ADAL authentication」 (Azure RMS の ADAL 認証を構成する) の Azure 構成手順に従い、その後、次のアプリ初期化手順に戻ります。Follow the Azure configuration steps in Configure Azure RMS for ADAL authentication then return to the following app initialization step.
  2. RMS SDK 2.1 で提供される内部 ADAL 認証を使用するようにアプリケーションを構成する準備が整いました。You are now ready to configure your application to use the internal ADAL authentication provided by the RMS SDK 2.1.

RMS クライアントを構成するには、IpcInitialize の呼び出しの直後に IpcSetGlobalProperty に呼び出しを追加し、RMS クライアントを構成します。To configure you RMS client, add a call to IpcSetGlobalProperty right after calling IpcInitialize to configure the RMS client. 次のコード スニペットを例として使用できます。Use the following code snippet as an example.

  C++
  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
  }

外部認証External Authentication

独自の認証トークンの管理方法のコード例を次に示します。Use this code as an example of how to manage your own authentication tokens. C++ extern HRESULT GetADALToken(LPVOID pContext, const IPC_NAME_VALUE_LIST& Parameters, __out wstring wstrToken) throw();C++ 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);
  }