ラボ 19 - アプリケーションを登録する

予想所要時間: 30 分

演習 1 - アプリケーションを登録する

タスク 1 - アプリの登録

アプリケーションを登録すると、アプリケーションと Microsoft ID プラットフォームとの間の信頼関係が確立されます。 この信頼は一方向です。つまり、アプリは Microsoft ID プラットフォームを信頼しますが、その逆はありません。

  1. グローバル管理者アカウントを使用して、https://entra.microsoft.com  にサインインします。

  2. ポータル メニューを開き、 [Microsoft Entra ID] を選択します。

  3. [ID] メニューの [アプリケーション][アプリの登録] を選択します。

  4. [アプリの登録] ページで、[+ 新規登録] を選択します。

  5. [アプリケーションの登録] ブレードで既定値を使用して、”デモ アプリ” という名前のアプリを登録します。 リダイレクト URI を入力する必要はありません。

    [アプリケーションの登録] ページで名前と既定の設定が強調表示されている画面イメージ

  6. 完了すると、[デモ アプリ] ページが表示されます。

タスク 2 - プラットフォーム設定を構成する

リダイレクト URI など、アプリケーションの種類ごとの設定は、Azure portal の [プラットフォーム構成]  で構成されます。  Web や シングルページ アプリケーションなどの一部のプラットフォームでは、リダイレクト URI を手動で指定する必要があります。 モバイルやデスクトップなどの他のプラットフォームでは、他の設定を構成するときに自動的に生成されるリダイレクト URI から選択できます。

ターゲットのプラットフォームまたはデバイスに基づいてアプリケーション設定を構成するには、次の手順を行います。

そのプラットフォーム設定を構成して、登録済みのアプリケーションのリダイレクト URI を追加および変更します。

  1. Microsoft Entra 管理センターの  [アプリの登録] で、アプリケーションを選択します。

  2.  [管理] で、 [認証] を選択します。

  3.  [プラットフォーム構成] で  [+ プラットフォームを追加] を選択します。

  4.  [プラットフォームの構成] で、アプリケーションの種類 (プラットフォーム) のタイルを選択して、その設定を構成します。

    Azure portal の [プラットフォームの構成] ウィンドウのスクリーンショット

    プラットフォーム 構成設定
    Web アプリの  [リダイレクト URI]  (認証後に Microsoft ID プラットフォームによってユーザーのクライアントがリダイレクトされ、セキュリティ トークンが送信される場所) を入力します。 サーバーで実行される標準の Web アプリケーションについては、このプラットフォームを選択します。
    シングルページ アプリ アプリの  [リダイレクト URI]  (認証後に Microsoft ID プラットフォームによってユーザーのクライアントがリダイレクトされ、セキュリティ トークンが送信される場所) を入力します。 JavaScript、または Angular、Vue.js、React.js、Blazor WebAssembly などのフレームワークでクライアント側の Web アプリをビルドしている場合は、このプラットフォームを選択します。
    iOS/macOS アプリの [バンドル ID] を入力します。これは、 Info.plist の XCode または [ビルド設定] にあります。 バンドル ID を指定すると、リダイレクト URI が自動的に生成されます。
    Android AndroidManifest.xml ファイルにあるアプリの [パッケージ名] を入力し、 署名ハッシュを生成して入力します。 これらの設定を指定すると、リダイレクト URI が自動的に生成されます。
    モバイル アプリケーションとデスクトップ アプリケーション  [推奨されるリダイレクト URI]  のいずれかを選択するか、 [カスタム リダイレクト URI] を指定します。 デスクトップ アプリケーションの場合は、https://login.microsoftonline.com/common/oauth2/nativeclient をお勧めします。 最新の Microsoft Authentication Library (MSAL) を使用していない、またはブローカーを使用していないモバイル アプリケーションには、このプラットフォームを選択します。 また、デスクトップ アプリケーションにも、このプラットフォームを選択します。
  5.  [構成]  を選択して、プラットフォームの構成を完了します。

タスク 3 - 資格情報、証明書、クライアント シークレットを追加する

資格情報は、Web API にアクセスする Confidential クライアント アプリケーションによって使用されます。 Confidential クライアントの例として、Web アプリ、その他の Web API、またはサービス型およびデーモン型アプリケーションなどがあります。 資格情報により、アプリケーションはそれ自体として認証され、実行時にユーザーによる操作は必要ありません。

証明書とクライアント シークレット (文字列) の両方を資格情報として Confidential クライアント アプリの登録に追加できます。

アプリの登録の [証明書およびシークレット] ウィンドウを示す Azure portal のスクリーンショット

**Note**: Sometimes called a *public key*, certificates are the recommended credential type, because as they provide a higher level of assurance than a client secret. When using a trusted public certificate, you can add the certificate using the Certificates & secrets feature. Your certificate must be one of the following file types: .cer, .pem, .crt.


**Note**: The client secret, also known as an *application password*, is a string value your app can use in place of a certificate to identity itself. It's the easier of the two credential types to use. It's often used during development, but is considered less secure than a certificate. You should use certificates in your applications running in production.
  1. Azure portal の [アプリの登録]  でアプリケーションを選択します。

  2.  [証明書とシークレット] 、 [+ 新しいクライアント シークレット] の順に選択します。

  3. クライアント シークレットの説明を追加します。

  4. 期間を選択します。

  5.  [追加] を選択します。

  6. クライアント アプリケーション コードで使用するシークレットの値をメモ帳に保存します 。[証明書とシークレット] ページに新しいシークレット値が表示されます。 この値は一度だけ表示されるため、これをコピーすることが重要です。ページを更新して戻ると、マスクされた値としてのみ表示されます。

  7.  [リダイレクト URI の追加]  と [プラットフォーム設定の構成]  セクションをスキップします。 ユーザーは対話的にログインしないため、Web API のリダイレクト URI を構成する必要はありません。

  8. ここでは、 [資格情報の追加]  セクションをスキップします。 API からダウンストリームにアクセスする場合にのみ、独自の資格情報が必要になりますが、この記事では取り上げません。

Web API を登録すると、スコープを追加する準備は完了です。これを API のコードに使って、API のコンシューマーにきめ細かなアクセス許可を付与することができます。

タスク 5 - スコープを追加する

クライアント アプリケーションのコードによって、保護されたリソース (Web API) への要求と共にアクセス トークンを渡すことにより、Web API で定義された操作を実行するアクセス許可が要求されます。 Web API では、操作に必要なスコープ (アプリケーションのアクセス許可とも呼ばれます) が受け取ったアクセス トークンに含まれている場合にのみ、要求された操作が実行されます。

まず、次の手順で Employees.Read.All という名前のスコープの例を作成します。

  1. Microsoft Entra 管理センターにサインインします。

  2. 複数のテナントにアクセスできる場合は、上部のメニューの  [ディレクトリ + サブスクリプション]  フィルターを使用して、クライアント アプリの登録を含むテナントを選択します。

  3.  [ID][アプリケーション] 、 [アプリの登録] の順に選択してから、API のアプリの登録を選択します。

  4.  [API の公開] 、 [+ スコープの追加] の順に選択します。

    Azure portal のアプリ登録の [API の公開] ペイン

  5. まだ構成していない場合は、 [アプリケーション ID URI] を設定するように求められます。 アプリ ID URI は、API のコードで参照するスコープのプレフィックスとして機能し、グローバルに一意である必要があります。 指定されている既定値 (api://<application-client-id> 形式) を使用するか、 https://contoso.com/api のようにより読みやすい URI を指定できます。

  6. Save and continue を選択します。

  7. 次に、 [スコープの追加] ペインでスコープの属性を指定します。 このチュートリアルでは、例の値を使用するか、独自の値を指定できます。

    フィールド 説明
    スコープ名 スコープの名前。 一般的なスコープの名前付け規則は、resource.operation.constraint です。 Employees.Read.All
    同意できるユーザー このスコープにユーザーが同意できるかどうかと、管理者の同意が必要かどうか。 より高い特権のアクセス許可にするには、 [管理者のみ] を選択します。 管理者とユーザー
    管理者の同意の表示名 管理者のみに表示される、スコープの目的についての簡単な説明。 従業員レコードへの読み取り専用アクセス
    管理者の同意の説明 管理者のみに表示される、スコープによって付与されるアクセス許可の詳細な説明。 すべての従業員データへの読み取り専用アクセスをアプリケーションに許可します。
    ユーザーの同意の表示名 スコープの目的に関する簡単な説明。 [同意できるユーザー] を [管理者とユーザー] に設定した場合にのみユーザーに表示されます。 従業員レコードへの読み取り専用アクセス
    ユーザーの同意の説明 スコープによって付与されるアクセス許可の詳細な説明。 [同意できるユーザー] を [管理者とユーザー] に設定した場合にのみユーザーに表示されます。 従業員データへの読み取り専用アクセスをアプリケーションに許可します。
  8.  [状態]  を [有効] に設定し、 [スコープの追加] を選択します。

  9. (省略可能) 定義されているスコープに対してアプリのユーザーによる同意を求めるメッセージを表示しないようにするために、クライアント アプリケーションによる Web API へのアクセスを ‘‘事前承認する’’ ことができます。 **   ユーザーには同意を拒否する機会がないため、信頼できるクライアント アプリケーション ‘‘だけ’’ を事前承認します。 **  

    1.  [認可済みのクライアント アプリケーション] で、 [クライアント アプリケーションの追加] を選択します。

    2. 事前承認するクライアント アプリケーションの [アプリケーション (クライアント) ID]  を入力します。 たとえば、以前に登録した Web アプリケーションのそれです。

    3.  [承認済みのスコープ] で、同意を求めるメッセージを表示しないスコープを選んでから、 [アプリケーションの追加] を選択します。

    4. この省略可能な手順を行った場合、クライアント アプリは認可済みのクライアント アプリ (PCA) になり、ユーザーはアプリにサインインするときに同意を求められません。

タスク 6 - 管理者の同意が必要なスコープを追加する

次に、管理者のみが同意できる Employees.Write.All という名前の別の例のスコープを追加します。 通常、管理者の同意が必要なスコープは、多くの場合、ユーザーが対話的にサインインしていないバックエンド サービスまたはデーモンとして実行されるクライアント アプリケーションによる高い特権操作へのアクセス権を付与するために使用されます。

  1. Employees.Write.All のスコープの例を追加するには、上記の手順に従って、これらの値を  [スコープの追加]  ペインで指定します。

    フィールド 値の例
    スコープ名 Employees.Write.All
    同意できるユーザー 管理者のみ
    管理者の同意の表示名 従業員レコードへの書き込みアクセス
    管理者の同意の説明 すべての従業員データへの書き込みアクセスをアプリケーションに許可します。
    ユーザーの同意の表示名 なし (空のまま)
    ユーザーの同意の説明 なし (空のまま)

    : 前のセクションで説明した両方のスコープの例を正しく追加すると、この画像のように、Web API のアプリ登録の [API の公開]  ペインに表示されます。

    2 つの公開されたスコープを示す [API の公開] ペインのスクリーンショット。

    この画像に示すように、スコープの完全な文字列は、Web API の [アプリケーション ID URI]  とスコープの [スコープ名] を連結したものです。

     **Note**: For example, if your web API's application ID URI is `https://contoso.com/api` and the scope name is Employees.Read.All, the full scope is: `https://contoso.com/api/Employees.Read.All`
    
    
     **Note**: Next, you will configure a client app's registration with access to your web API and the scopes you defined by following the steps above.  クライアント アプリの登録に Web API へのアクセス許可が付与されると、Microsoft ID プラットフォームによってクライアントに OAuth 2.0 アクセス トークンが発行されます。 クライアントから Web API を呼び出すと、アクセス トークンが表示されます。そのスコープ (scp) 要求は、クライアントのアプリ登録で指定したアクセス許可に設定されています。 公開するスコープは、必要に応じて後から追加することもできます。 Web API を使用すると、複数の操作に関連付けられた複数のスコープを公開できることを考慮してください。 リソースは、受け取った OAuth 2.0 アクセス トークンのスコープ (scp) 要求を評価することによって、実行時に Web API へのアクセスを制御します。
    

演習 2 - カスタム ロールを使用してアプリの登録を管理する

タスク 1 - 新しいカスタム ロールを作成してアプリ登録を管理するためのアクセス権を付与する

アプリ管理用の新しいカスタム ロールを作成する必要があります。 この新しいロールは、資格情報管理の実行に必要な特定の権限のみに限定する必要があります。

  1. グローバル管理者アカウントを使用して、 https://entra.microsoft.com  にサインインします。

  2. ポータル メニューを開き、 [Microsoft Entra ID] を選択します。

  3. 左側のメニューの [ID] で、[ロールと管理者] を選択します。

  4. 次に、[ロールと管理者] 項目を選択して、[+ 新しいカスタム ロール] を選択します。

    [新しいカスタム ロール] メニュー オプションが強調表示されている [ロールと管理者] ブレードを表示している画面イメージ

  5. [新しいカスタム ロール] ダイアログの [基本] タブで、[名前] ボックスに「マイ カスタム アプリ ロール」と入力します。

  6. 残りのオプションを確認してから、[次へ] を選択します。

  7. [アクセス許可] タブで、使用可能なアクセス許可を確認します。

  8. [アクセス許可の名前または説明で検索] ボックスに「資格情報」と入力します。

  9. 結果から [管理] アクセス許可を選択し、[次へ] を選択します。

        microsoft.directory/servicePrincipals/managePasswordSingleSignOnCredentials  -   Manage password single sign-on credentials or service principals.
        microsoft.directory/servicePrincipals/synchronizationCredentials/manage    -   Manage application provisioning secrets and credentials.
    

    検索、アクセス許可の管理、[次へ] が強調表示された [新しいカスタム ロールのアクセス許可] タブを表示している画面イメージ

    これら 2 つを選ぶ理由 - アプリケーション プロビジョニングの場合、これら 2 つの項目は、作成中のアプリケーションまたはサービス プリンシパルのシングル サインオンを有効にして強制するために必要な最小限のアクセス許可です。エンタープライズ アプリケーションを一連のユーザーまたはグループに割り当てることができます。 他の権限も付与される可能性があります。 使用可能なアクセス許可の完全な一覧は https://docs.microsoft.com/azure/active-directory/roles/custom-enterprise-app-permissions で取得できます。

  10. 変更内容を確認し、[作成] を選択します。