適用対象: 従業員テナント緑
外部テナント (詳細)
このチュートリアルでは、認証要素と承認要素を ASP.NET Core Web アプリに追加します。 前の チュートリアルでは、ASP.NET Core プロジェクトを作成し、認証用に構成しました。
このチュートリアルでは、次の操作を行います。
- 認可要素と認証要素をコードに追加する
- ID トークンでの要求の表示を有効にする
- サインインとサインアウトエクスペリエンスを追加する
[前提条件]
- 「チュートリアル: ユーザーを認証する ASP.NET Core Web アプリを設定する」の前提条件と手順の完了。
認証要素と承認要素を追加する
ASP.NET Core Web アプリに認証要素と承認要素を追加するには、HomeController.csファイルとProgram.cs ファイルを変更する必要があります。 これには、ホーム ページの管理、正しい名前空間の追加、サインインの構成が含まれます。
HomeController.cs に認可を追加する
アプリケーションのホーム ページには、ユーザーを承認する機能が必要です。
Microsoft.AspNetCore.Authorization
名前空間は、Web アプリへの承認を実装するためのクラスとインターフェイスを提供します。
[Authorize]
属性は、認証されたユーザーのみが Web アプリを使用できるように指定するために使用されます。
Web アプリで Controllers/HomeController.cs を開き、ファイルの先頭に次のスニペットを追加します。
using System.Diagnostics; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using dotnetcore_webapp.Models;
次のスニペットに示すように、
[Authorize]
クラス定義の上にHomeController
属性を追加します。[Authorize] public class HomeController : Controller { ...
認証要素と承認要素をProgram.csに追加する
Program.cs ファイルはアプリケーションのエントリ ポイントであり、Web アプリに認証と承認を追加するように変更する必要があります。 認証に appsettings.jsonで定義 されている設定をアプリが使用できるようにするには、サービスを追加する必要があります。
ファイルの先頭に次の名前空間を追加します。
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;
次に、認証に Microsoft ID を使用するようにアプリを構成する Microsoft Identity Web アプリ認証サービスを追加します。
// 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. // 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();
サインインとサインアウトエクスペリエンスを追加する
UI は、サインインとサインアウトのためのよりわかりやすいエクスペリエンスを提供するための更新プログラムである必要があります。このセクションでは、ユーザーの認証状態に基づいてナビゲーション項目を表示する新しいファイルを作成する方法を示します。 このコードでは ID トークン要求を読み取り、ユーザーが認証済みで、User.Claims
を使用して ID トークン要求を抽出するかどうか確認します。
Views/Shared で新しいファイルを作成し、_LoginPartial.cshtml という名前を付けます。
ファイルを開き、サインインとサインアウトエクスペリエンスを追加するための次のコードを追加します。
@using System.Security.Principal <ul class="navbar-nav"> @if (User.Identity is not null && User.Identity.IsAuthenticated) { <li class="nav-item"> <span class="nav-link text-dark">Hello @User.Claims.First(c => c.Type == "preferred_username").Value!</span> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a> </li> } else { <li class="nav-item"> <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a> </li> } </ul>
Views/Shared/_Layout.cshtml を開き、前の手順で作成した
_LoginPartial
への参照を追加します。 次のスニペットに示すように、navbar-nav
クラスの末尾の近くに配置します。<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between"> <ul class="navbar-nav flex-grow-1"> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a> </li> <li class="nav-item"> <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a> </li> </ul> <partial name="_LoginPartial" /> </div>
カスタム URL ドメインを使用する (省略可能)
適用対象: 従業員テナント緑
外部テナント (詳細)
カスタム ドメインを使用して、認証 URL を完全にブランド化します。 ユーザー視点では、認証プロセス中にユーザーはドメインに留まるため、ciamlogin.com ドメイン名にリダイレクトされません。
カスタム ドメインを使用するには、次の手順に従います。
「外部テナントのアプリのカスタム URL ドメインを有効にする」の手順に従って、外部テナントのカスタム URL ドメインを有効にします。
appsettings.json ファイルを開きます。
-
Instance
パラメーターとTenantId
パラメーターをAuthority
プロパティに更新します。 -
Authority
値に文字列https://Enter_the_Custom_Domain_Here/Enter_the_Tenant_ID_Here
を追加します。Enter_the_Custom_Domain_Here
を実際のカスタム URL ドメインに、Enter_the_Tenant_ID_Here
を実際のテナント ID に置き換えます。 テナント ID がない場合は、 テナントの詳細を読み取る方法について説明します。 - 値
knownAuthorities
を持つ プロパティを追加します。
-
appsettings.json ファイルに変更を加えた後、カスタム URL ドメインが login.contoso.com で、テナント ID が aaaabbbb-0000-cccc-1111-dddd222eeee の場合、ファイルは次のスニペットのようになります。
{
"AzureAd": {
"Authority": "https://login.contoso.com/aaaabbbb-0000-cccc-1111-dddd2222eeee",
"ClientId": "Enter_the_Application_Id_Here",
"ClientCertificates": [
{
"SourceType": "StoreWithThumbprint",
"CertificateStorePath": "CurrentUser/My",
"CertificateThumbprint": "AA11BB22CC33DD44EE55FF66AA77BB88CC99DD00"
}
],
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-callback-oidc",
"KnownAuthorities": ["login.contoso.com"]
...