チュートリアル: アプリケーションにサインインを追加する

前のチュートリアルでは、ASP.NET Core プロジェクトが作成され、認証用に構成されました。 このチュートリアルでは、必要なパッケージをインストールし、サインインとサインアウトのエクスペリエンスに認証を実装するコードを追加します。

このチュートリアルの内容:

  • 認証に必要な NuGet パッケージを特定してインストールする
  • コードに認証を実装する
  • サインインとサインアウトのエクスペリエンスを追加する

前提条件

ID パッケージをインストールする

ユーザーの認証を有効にするためには、ID 関連の NuGet パッケージがプロジェクトにインストールされている必要があります。

  1. Visual Studio のトップメニューで、[ツール] > [NuGet Package Manager] > [ソリューションの NuGet パッケージの管理] を選択します。
  2. [参照] タブを選択した状態で、Microsoft.Identity.Web.UI を検索して選択します。 [プロジェクト] チェックボックスをオンにして、[インストール] を選択します。
  3. Microsoft.Identity.Web.DiagnosticsMicrosoft.Identity.Web.DownstreamApi に対してこれを繰り返します。

認証を実装し、トークンを取得する

  1. Program.cs を開き、ファイル内容全体を次のスニペットに置き換えます。

    // <ms_docref_import_types>
    using Microsoft.AspNetCore.Authorization;
    using Microsoft.AspNetCore.Mvc.Authorization;
    using Microsoft.Identity.Web;
    using Microsoft.Identity.Web.UI;
    // </ms_docref_import_types>
    
    // <ms_docref_add_msal>
    WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
    IEnumerable<string>? initialScopes = builder.Configuration["DownstreamApi:Scopes"]?.Split(' ');
    
    
    builder.Services.AddMicrosoftIdentityWebAppAuthentication(builder.Configuration, "AzureAd")
        .EnableTokenAcquisitionToCallDownstreamApi(initialScopes)
            .AddDownstreamApi("DownstreamApi", builder.Configuration.GetSection("DownstreamApi"))
            .AddInMemoryTokenCaches();
    // </ms_docref_add_msal>
    
    // <ms_docref_add_default_controller_for_sign-in-out>
    builder.Services.AddRazorPages().AddMvcOptions(options =>
        {
            var policy = new AuthorizationPolicyBuilder()
                          .RequireAuthenticatedUser()
                          .Build();
            options.Filters.Add(new AuthorizeFilter(policy));
        }).AddMicrosoftIdentityUI();
    // </ms_docref_add_default_controller_for_sign-in-out>
    
    // <ms_docref_enable_authz_capabilities>
    WebApplication app = builder.Build();
    
    app.UseAuthentication();
    app.UseAuthorization();
    // </ms_docref_enable_authz_capabilities>
    
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    
    app.UseRouting();
    
    app.MapRazorPages();
    app.MapControllers();
    
    app.Run();
    

サインインとサインアウトのエクスペリエンスを追加する

NuGet パッケージをインストールし、認証に必要なコードを追加したら、サインインとサインアウトのエクスペリエンスを追加します。

_LoginPartial.cshtml ファイルを作成する

  1. [ページ] を展開し、[共有] を右クリックして、[追加] > [Razor ページ] を選択します。
  2. [Razor ページ - 空][追加] の順に選択します。
  3. 名前に _LoginPartial.cshtml と入力し、[追加] を選択します。

_LoginPartial.cshtml ファイルを編集する

  1. _LoginPartial.cshtml を開き、サインインとサインアウトのエクスペリエンスを追加するために次のコードを追加します。

    @using System.Security.Principal
    
    <ul class="navbar-nav">
    @if (User.Identity?.IsAuthenticated == true)
    {
            <li class="nav-item">
                <span class="navbar-text text-dark">Hello @User.Identity?.Name!</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>
    
  2. _Layout.cshtml を開き、前の手順で作成した _LoginPartial への参照を追加します。 この 1 行を </ul></div> の間に置く必要があります。

        </ul>
        <partial name="_LoginPartial" />
    </div>
    

次の手順