AD FS 2016 以降を使用して OAuth 機密クライアントを使用するサーバー側アプリケーションを構築する

Active Directory フェデレーション サービス (AD FS) 2016 以降では、Web サーバー上で実行されるアプリやサービスなど、独自のシークレットを保持できるクライアントがサポートされています。 このようなクライアントは "機密クライアント" と呼ばれます。

この記事では、Web サーバーで実行される Web アプリケーションについて説明します。 このアプリケーションは、AD FS に対する機密クライアントとして機能します。

前提条件

次のリソースが必要です。

  • GitHub クライアント ツール。

  • Windows Server 2016 Technical Preview 4 以降の AD FS。 (この記事では、AD FS がインストールされていることを前提とします)。

  • Visual Studio 2013 以降

アプリケーション グループを作成する

AD FS 2016 以降でアプリケーション グループを作成するには:

  1. [AD FS の管理] で、[アプリケーション グループ] を右クリックします。 次に、[アプリケーション グループの追加] を選びます。

  2. アプリケーション グループの追加ウィザードで、次のようにします。

    1. [名前] に「ADFSOAUTHCC」と入力します。
    2. [クライアント サーバー アプリケーション] で、[Web API にアクセスするサーバー アプリケーション] テンプレートを選びます。
    3. [次へ] を選択します。

    Screenshot that shows where to select the template for the server application that accesses a Web A P I.

  3. [クライアント識別子] の値をコピーします。 これは後ほどアプリケーションの web.config ファイルで使います。 これは ida:ClientId の値です。

    Screenshot that shows where to copy the Client Identifier value.

  4. [リダイレクト URI] に「https://localhost:44323」と入力します。 [追加] を選んでから [次へ] を選びます。

  5. [アプリケーションの資格情報の構成] ページで、次のようにします。

    1. [共有シークレットを生成する] を選びます。
    2. シークレットをコピーします。 このシークレットは後ほどアプリケーションの web.config ファイルで使います。 これは ida:ClientSecret の値です。
    3. [次へ] を選択します。

    Screenshot that shows the Configure Application Credentials page.

  6. [Web API の構成] ページで、次のようにします。

    1. [識別子] に「https://contoso.com/WebApp」と入力します。 この値は後ほどアプリケーションの web.config ファイルで使います。 これは ida:GraphResourceId の値です。
    2. [追加] を選択します。
    3. [次へ] を選択します。

    Screenshot that shows the Configure Web A P I page.

  7. [アクセス制御ポリシーの適用] ページで、[すべてのユーザーを許可] を選びます。 [次へ] を選択します。

    Screenshot that shows the Apply Access Control Policy page.

  8. [アプリケーションのアクセス許可の構成] ページで、openiduser_impersonation が選ばれていることを確認します。 [次へ] を選択します。

    Screenshot that shows the Configure Application Permissions page.

  9. [概要] ページで、[次へ] を選びます。

  10. [完了] ページで [閉じる] を選びます。

データベースをアップグレードする

この記事は、Visual Studio 2015 に基づいて書かれています。 この例を Visual Studio 2015 で動くようにするには、このセクションの手順に従ってデータベース ファイルをアップグレードします。

このセクションでは、サンプル Web API をダウンロードし、Visual Studio 2015 でデータベースをアップグレードする方法について説明します。 Azure Active Directory サンプルを使います。

サンプル プロジェクトをダウンロードするには、Git Bash で次のコマンドを入力します。

git clone https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-oauth2-useridentity.git

Screenshot that shows how to download the sample project.

データベース ファイルをアップグレードするには:

  1. Visual Studio でプロジェクトを開きます。 表示されるウィンドウのメッセージでは、アプリに SQL Server 2012 Express が必要であることが説明されています。 SQL Server 2012 Express がない場合は、データベースをアップグレードする必要があります。 [OK] を選択します。

    Screenshot that shows a message explaining that the app requires S Q L Server 2012 Express. Otherwise, you need to upgrade the database.

  2. ウィンドウの上部にある [ビルド]>[ソリューションのビルド] を選んで、アプリケーションをコンパイルします。 すべての NuGet パッケージが復元されます。

    Screenshot that shows that the restoration of the NuGet packages was successful.

  3. ウィンドウの上部で [表示]>[サーバー エクスプローラー] を選びます。 開いたペインの [データ接続][DefaultConnection] を右クリックし、[接続の変更] を選びます。

    Screenshot that highlights the Modify Connection menu item.

  4. [接続の変更] ウィンドウで、[データベース ファイル名 (新規または既存)][参照] を選びます。 「<パス>\<ファイル名>.mdf」と入力します。 次に、ダイアログ ボックスで [はい] を選びます。

    Screenshot that shows the dialog box for creating the database file.

  5. [接続の変更] ダイアログ ボックスで、[詳細設定] を選びます。

    Screenshot that shows the Advanced button.

  6. [詳細プロパティ] ダイアログ ボックスの [データ ソース] で、(LocalDb\v11.0)(LocalDB)\MSSQLLocalDB に変更します。

    Screenshot that highlights the Data Source field.

  7. [OK]>[OK] の順に選択します。 次に、[はい] を選んでデータベースをアップグレードします。

    Screenshot that shows the dialog box for upgrading the database.

  8. プロセスが完了したら、右側の [接続文字列] フィールドの値をコピーします。

    Screenshot that shows the Connection String field.

  9. web.config ファイルを開き、connectionString の値を前にコピーした値に置き換えます。 web.config ファイルを保存します。

    注意

    前の手順は、新しい接続文字列を取得するために必要です。 そうしないと、この記事で後ほど Update-Database を実行したときにエラーが発生します。

    Screenshot that shows where to find the connection string value.

  10. Visual Studio ウィンドウの上部で、[表示]>[その他のウィンドウ]>[パッケージ マネージャー コンソール] を選びます。

    Screenshot that highlights the Package Manager Console menu item.

  11. [パッケージ マネージャー コンソール] ペインで、「Enable-Migrations」と入力します。

    注意

    "Enable-Migrations はコマンドレットとして認識されません" というエラーが表示される場合は、「Install-Package EntityFramework」と入力してエンティティ フレームワークを更新します。

    Screenshot that shows where to enter Enable-Migrations.

  12. Add-Migration <AnyNameHere>」と入力します。

    Screenshot that shows where to enter the Add-Migration test.

  13. Update-Database」と入力します。

    Screenshot that shows where to enter Update-Database.

Web API を変更する

Visual Studio でサンプル Web API を変更するには:

  1. Visual Studio でサンプルを開きます。

  2. web.config ファイルを開きます。 「アプリケーション グループを作成する」の手順でコピーした値を使って、次の設定を変更 します。

    • ida:ClientId: クライアント ID を入力します。

    • ida:ClientSecret: クライアント シークレットを入力します。

    • ida:GraphResourceId: グラフ リソース ID を入力します。

    Screenshot that highlights the values you should change.

  3. App_Start で、Startup.Auth.cs ファイルを開きます。 次の変更を行います。

    • 次の行をコメント アウトします。

      //private static string aadInstance = ConfigurationManager.AppSettings["ida:AADInstance"];
      //private static string tenant = ConfigurationManager.AppSettings["ida:Tenant"];
      //public static readonly string Authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
      
    • 削除した行の代わりに、次の行を追加します。

      public static readonly string Authority = "https://<your_fsname>/adfs";
      

      ここで、<your_fsname> を自分のフェデレーション サービス URL の DNS の部分に置き換えます。 たとえば、「adfs.contoso.com」と入力します。

      Screenshot that shows the changes in the Startup dot Auth dot C S file.

  4. UserProfileController.cs ファイルを開きます。 次の変更を行います。

    • 次の行をコメントアウトします。

      //authContext = new AuthenticationContext(Startup.Authority, new TokenDbCache(userObjectID));
      
    • 両方の出現箇所を次のコードに置き換えます。

      authContext = new AuthenticationContext(Startup.Authority, false, new TokenDbCache(userObjectID));
      

      Screenshot that shows the changes in the User Profile Controller dot C S file.

    • 次の行をコメントアウトします。

      //authContext = new AuthenticationContext(Startup.Authority);
      
    • 両方の出現箇所を次のコードに置き換えます。

      authContext = new AuthenticationContext(Startup.Authority, false);
      

      Screenshot that highlights the changes made to the authContext value.

    • 次の行のすべてのインスタンスをコメントアウトします。

      Uri redirectUri = new Uri(Request.Url.GetLeftPart(UriPartial.Authority).ToString() + "/OAuth");
      
    • すべての出現箇所を次のコードに置き換えます。

      Uri redirectUri = new Uri(Request.Url.GetLeftPart(UriPartial.Authority).ToString());
      

      Screenshot that highlights the U R I redirect U R I value.

ソリューションをテストする

機密クライアント ソリューションをテストするには:

  1. Visual Studio ウィンドウの上部で、[Internet Explorer] が選ばれていることを確認します。 次に、緑色の矢印を選びます。

    Screenshot that highlights the Internet Explorer button.

  2. 開いた ASP.NET ページで次のようにします。

    1. 右上隅にある [登録] を選びます。
    2. ユーザー名とパスワードを入力します。
    3. [登録] を選んで、SQL データベースにローカル アカウントを作成します。

    Screenshot that shows where to create a local account in the S Q L database.

  3. "Hello abby@contoso.com!" というメッセージに注意してください。 [プロファイル] を選択します。

    Screenshot that highlights Profile.

  4. 新しいページに、サインインを求めるメッセージが表示されます。 [こちら] を選びます。

    Screenshot that shows the User Profile page.

    AD FS へのサインインを求めるメッセージが表示されます。

    Screenshot that shows the sign-in page for A D F S.

次の手順

AD FS の開発について確認します。