サンプル iOS (Swift) アプリでユーザーをサインインさせ、保護された Web API を呼び出す

このガイドでは、ユーザーをサインインさせ、保護された ASP.NET Core Web API を呼び出すようにサンプル iOS モバイル アプリケーションを構成する方法について説明します。

この記事では、次のタスクを実行します。

  • Microsoft Entra 管理センターでアプリケーションを登録します。
  • プラットフォーム リダイレクト URL を追加します。
  • パブリック クライアント フローを有効にします。
  • 顧客テナントの詳細に独自の Microsoft Entra 外部 ID を使用するように iOS 構成コード サンプル ファイルを更新します。
  • サンプル iOS モバイル アプリケーションを実行してテストします。

前提条件

  • Xcode

  • 外部テナント。 お持ちでない場合は、無料試用版にサインアップしてください。

  • 少なくとも 1 つのスコープ (委任されたアクセス許可) と 1 つのアプリ ロール (アプリケーション アクセス許可) を発行する API 登録 (ToDoList.Read など)。 まだ行っていない場合は、サンプル iOS モバイル アプリで API を呼び出す手順に従って、ASP.NET Core Web API を機能的に保護します。 次の手順を完了してください。

    • Web API アプリケーションを登録します。
    • API スコープを構成します。
    • アプリ ロールを構成します。
    • 省略可能な要求を構成します。
    • サンプル Web API を複製またはダウンロードします。
    • サンプル Web API を構成して実行します。

アプリケーションの登録

Microsoft Entra を使用してアプリケーションでユーザーをサインインできるようにするには、作成するアプリケーションを Microsoft Entra 外部 ID に認識させる必要があります。 アプリの登録によって、アプリと Microsoft Entra の間に信頼関係が確立されます。 アプリケーションを登録すると、外部 ID によって、アプリケーション (クライアント) ID と呼ばれる一意識別子が生成されます。これは、認証要求を作成するときにアプリを識別するために使用される値です。

Microsoft Entra 管理センターにアプリを登録する方法を次の手順に示します。

  1. アプリケーション開発者以上として Microsoft Entra 管理センターにサインインします。

  2. 複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコン を使用し、[ディレクトリとサブスクリプション] メニューから外部テナントに切り替えます。

  3. [ID]>[アプリケーション]>[アプリの登録] を参照します。

  4. [+ 新規登録] を選択します。

  5. 表示される [アプリケーションの登録] ページで、次のようにします。

    1. アプリのユーザーに表示されるわかりやすいアプリケーションの [名前] を入力します (例: ciam-client-app)。
    2. [サポートされているアカウントの種類] で、 [この組織のディレクトリ内のアカウントのみ] を選択します。
  6. [登録] を選択します。

  7. 登録が成功すると、アプリケーションの [概要] ペインが表示されます。 アプリケーションのソース コードで使用するアプリケーション (クライアント) ID を記録します。

プラットフォーム リダイレクト URL を追加する

アプリの登録にアプリの種類を指定するには、次の手順に従います。

  1. [管理] で、 [認証] を選択します。
  2. [プラットフォーム構成] ページで、[プラットフォームの追加] を選択し、[iOS / macOS] オプションを選びます。
  3. プロジェクトのバンドル ID を入力します。 サンプル コードをダウンロードした場合、この値は com.microsoft.identitysample.ciam.MSALiOS です。
  4. [構成] を選択し、後でアプリを構成するときに入力できるように、[iOS / macOS の構成] ペインに表示される [MSAL 構成] を保存しておきます。
  5. 完了 を選択します。

パブリック クライアント フローを有効にする

アプリをパブリック クライアントとして識別するには、次の手順に従います。

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

  2. [詳細設定] で、[パブリック クライアント フローを許可する] に対して [はい] を選択します。

  3. [保存] を選択して変更を保存します。

  1. [アプリの登録] ページで、作成したアプリケーション ("ciam-client-app" など) を選択して、その [概要] ページを開きます。

  2. [管理] の下にある [API のアクセス許可] を選択します。 構成済みアクセス許可一覧から、お使いのアプリケーションに User.Read アクセス許可が割り当てられています。 ただし、テナントが外部テナントであるため、コンシューマー ユーザー自身はこのアクセス許可に同意できません。 管理者は、テナント内のすべてのユーザーに代わってこのアクセス許可に同意する必要があります。

    1. [<ご使用のテナント名> に管理者の同意を与えます] を選択してから、[はい] を選択します。
    2. [最新の情報に更新] を選択し、両方のスコープの [状態] に "<ご使用のテナント名> に付与されました" と表示されていることを確認します。

iOS サンプル アプリに Web API のアクセス許可を付与する

クライアント アプリと Web API の両方を登録し、スコープを作成して API を公開したら、これらの手順に従って、API に対するクライアントのアクセス許可を構成できます。

  1. [アプリの登録] ページで、作成したアプリケーション ("ciam-client-app" など) を選択して、その [概要] ページを開きます。

  2. [管理] の下にある [API のアクセス許可] を選択します。

  3. [構成されたアクセス許可] の下で [アクセス許可の追加] を選択します。

  4. [所属する組織で使用している API] タブを選択します。

  5. API の一覧で、API (ciam-ToDoList-api など) を選択します。

  6. [委任されたアクセス許可] オプションを選択します。

  7. アクセス許可の一覧で [ToDoList.Read, ToDoList.ReadWrite] を選択します (必要に応じて検索ボックスを使用します)。

  8. [アクセス許可の追加] ボタンを選択します

  9. この時点で、アクセス許可が正しく割り当てられます。 ただし、このテナントは顧客のテナントであるため、コンシューマー ユーザー自身がこれらのアクセス許可に同意することはできません。 これに対処するには、管理者がテナント内のすべてのユーザーに代わってこれらのアクセス許可に同意する必要があります。

    1. [<ご使用のテナント名> に管理者の同意を与えます] を選択してから、[はい] を選択します。

    2. [最新の情報に更新] を選択し、両方のアクセス許可の [状態] に "<テナント名> に付与されました" と表示されていることを確認します。

  10. [Configured permissions] (構成されたアクセス許可) の一覧でToDoList.ReadToDoList.ReadWrite のアクセス許可を一度に 1 つずつ選択し、後で使用するためにアクセス許可の完全な URI をコピーします。 完全なアクセス許可 URI は、api://{clientId}/{ToDoList.Read} または api://{clientId}/{ToDoList.ReadWrite} のようになります。

サンプルの iOS モバイル アプリケーションを複製する

サンプル アプリケーションを取得するには、GitHub から複製するか、.zip ファイルとしてダウンロードします。

  • サンプルをクローンするには、コマンド プロンプトを開き、プロジェクトを作成する場所に移動し、次のコマンドを入力します。

    git clone https://github.com/Azure-Samples/ms-identity-ciam-browser-delegated-ios-sample.git
    

サンプル iOS モバイル アプリケーションを構成する

認証と Web API リソースへのアクセスを有効にするには、これらの手順に従ってサンプルを構成します。

  1. Xcode で、複製したプロジェクトを開きます。

  2. /MSALiOS/Configuration.swift ファイルを開きます。

  3. 次のプレースホルダーを見つけます。

    • Enter_the_Application_Id_Here を、前に登録したアプリのアプリケーション (クライアント) ID に置き換えます。
    • Enter_the_Redirect_URI_Here。プラットフォーム リダイレクト URL を追加したときに先ほどダウンロードした Microsoft Authentication Library (MSAL) 構成ファイルの kRedirectUri の値に置き換えます。
    • Enter_the_Protected_API_Full_URL_Here。Web API の URL に置き換えます。 Enter_the_Protected_API_Full_URL_Here には、ASP.NET Web API のベース URL (デプロイされた Web API URL) とエンドポイント (/api/todolist) を含める必要があります。
    • Enter_the_Protected_API_Scopes_Here。「iOS サンプル アプリに Web API のアクセス許可を付与する」で記録されたスコープに置き換えます。
    • Enter_the_Tenant_Subdomain_Here を、ディレクトリ (テナント) サブドメインに置き換えます。 たとえば、テナントのプライマリ ドメインが contoso.onmicrosoft.com の場合は、contoso を使用します。 テナントのサブドメイン名を知らない場合は、テナントの詳細を読み取る方法をご確認ください

アプリが構成され、実行する準備ができました。

iOS サンプル アプリを実行して Web API を呼び出す

アプリをビルドして実行するには、次のステップに従います。

  1. コードをビルドして実行するには、Xcode のメニューの [製品] から [実行]を選択します。 ビルドが成功すると、Xcode はシミュレーターでサンプル アプリを起動します。
  2. [対話的にトークンを取得] を選択して、アクセス トークンを要求します。
  3. [API - GET の実行] を選択し、前に設定した ASP.NET Core Web API を呼び出します。 Web API の呼び出しが成功すると、HTTP 200 が返されますが、HTTP 403 は未承認のアクセスを意味します。