チュートリアル: 外部テナントでの認証のために ASP.NET Core Web アプリを準備する
このチュートリアルは、ASP.NET Core Web アプリを構築し、それを Microsoft Entra 管理センターを使用する認証用に準備する方法を説明するシリーズのパート 2 です。 このシリーズのパート 1 では、外部テナントでアプリケーションを登録し、ユーザー フローを構成しました。 このチュートリアルでは、ASP.NET Core Web アプリを作成し、認証用に構成する方法について説明します。
このチュートリアルでは、次のことを行います。
- Visual Studio Code で ASP.NET Core プロジェクトを作成する
- 必要な NuGet パッケージを追加する
- アプリケーションの設定を構成する
- 認証を実装するコードを追加する
前提条件
- チュートリアル: ASP.NET Core Web アプリを構築するために外部テナントを準備する。
- ASP.NET Core アプリケーションをサポートする統合開発環境 (IDE) ならどれでも使用できますが、このチュートリアルでは Visual Studio Code を使用します。 ダウンロードするにはこちらをクリックしてください。
- .NET 7.0 SDK。
ASP.NET Core プロジェクトを作成する
Visual Studio Code を開き、[ファイル]>[フォルダーを開く...] の順に選択します。プロジェクトを作成する場所に移動して選択します。
[ターミナル]>[新しいターミナル] を選択して、新しいターミナルを開きます。
次のコマンドを入力して、モデル ビュー コントローラー (MVC) ASP.NET Core プロジェクトを作成します。
dotnet new mvc -n dotnetcore_webapp
ID パッケージをインストールする
ユーザーを認証するために、ID 関連の NuGet パッケージがプロジェクトにインストールされている必要があります。
次のコマンドを入力して dotnetcore_webapp フォルダーに変更し、次の関連する NuGet パッケージをインストールします。
cd dotnetcore_webapp dotnet add package Microsoft.Identity.Web.UI
認証用にアプリケーションを構成する
appsettings.json ファイルを開き、既存のコードを次のスニペットに置き換えます。
{ "AzureAd": { "Authority": "https://Enter_the_Tenant_Subdomain_Here.ciamlogin.com/", "ClientId": "Enter_the_Application_Id_Here", "ClientCredentials": [ { "SourceType": "ClientSecret", "ClientSecret": "Enter_the_Client_Secret_Here" } ], "CallbackPath": "/signin-oidc", "SignedOutCallbackPath": "/signout-callback-oidc" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "AllowedHosts": "*" }
Authority
- アプリの ID プロバイダー インスタンスとサインイン対象ユーザー。Enter_the_Tenant_Subdomain_Here
を外部テナントのサブドメインに置き換えます。 これを見つけるには、サイドバー メニューの [概要] を選択し、[概要] タブに切り替えます。caseyjensen.onmicrosoft.com 形式の [プライマリ ドメイン] を見つけます。 サブドメインは caseyjensen です。ClientId
- クライアントとも呼ばれる、アプリケーションの識別子。 引用符で囲まれた文字を、登録したアプリケーションの概要ページから先ほど記録した アプリケーション (クライアント) ID の値に置き換えます。ClientSecret
- テナントの準備に関するページで作成したクライアント シークレットの値。 引用符で囲まれたテキストを、Microsoft Entra 管理センターのクライアント シークレットの値に置き換えます。CallbackPath
- サーバーが応答を適切なアプリケーションにリダイレクトするのに役立つ識別子です。
変更をファイルに保存します。
Properties/launchSettings.json ファイルを開きます。
profiles
のhttps
セクションで、https://localhost:7274
となるようにapplicationUrl
のhttps
URL を変更します。 この URL を使用してリダイレクト URI を定義しました。変更内容をファイルに保存します。
HomeController.cs に認可を追加する
HomeController.cs ファイルには、アプリケーションのホーム ページ用のコードが含まれており、ユーザーを認可する機能が必要です。 Microsoft.AspNetCore.Authorization
名前空間は、Web アプリに認可を実装するためのクラスとインターフェイスを提供し、[Authorize]
属性は、認証されたユーザーのみが Web アプリを使用できるように指定するために使用されます。
コード エディターで、Controllers\HomeController.cs ファイルを開きます。
承認をコントローラーに追加する必要があり、
Microsoft.AspNetCore.Authorization
を追加して、ファイルの先頭が次のスニペットと同じになるようにします。using System.Diagnostics; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using dotnetcore_webapp.Models;
さらに、
HomeController
クラス定義のすぐ上に[Authorize]
属性を追加します。[Authorize]
Program.cs に認証と認可を追加する
Web アプリに認証と認可を追加するには、Program.cs を変更する必要があります。 これには、認証と認可のための名前空間の追加や、Microsoft ID プラットフォームを使用してユーザーをサインインできることが含まれます。
必要な名前空間を追加するには、Program.cs を開き、ファイルの先頭に次のスニペットを追加します。
using Microsoft.AspNetCore.Authentication.OpenIdConnect; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc.Authorization; using Microsoft.Identity.Web; using Microsoft.Identity.Web.UI; using System.IdentityModel.Tokens.Jwt;
次に、認証サービスをアプリケーションに追加します。これにより、Web アプリはMicrosoft ID プラットフォームを使用してユーザーをサインインできるようになります。 Program.cs の残りのコードは、次のスニペットで置き換えることができます。
var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); // This is required to be instantiated before the OpenIdConnectOptions starts getting configured. // By default, the claims mapping will map claim names in the old format to accommodate older SAML applications. // For instance, 'http://schemas.microsoft.com/ws/2008/06/identity/claims/role' instead of 'roles' claim. // This flag ensures that the ClaimsIdentity claims collection will be built from the claims in the token JwtSecurityTokenHandler.DefaultMapInboundClaims = false; // Sign-in users with the Microsoft identity platform builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(builder.Configuration) .EnableTokenAcquisitionToCallDownstreamApi() .AddInMemoryTokenCaches(); builder.Services.AddControllersWithViews(options => { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); options.Filters.Add(new AuthorizeFilter(policy)); }).AddMicrosoftIdentityUI(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
次のステップ
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示