クイック スタート: ASP.NET Core Web アプリでユーザーをサインインする

このクイックスタートでは、Microsoft.Identity.Web を使用してMicrosoft Entra IDでユーザーをサインインさせるASP.NET Core Webアプリを作成します。 テンプレートから新しいプロジェクトをスキャフォールディングするか、既存のアプリに認証を追加できます。

Microsoft Entra テナントがない場合は、開始する前に、free アカウントを作成します。

前提条件

テンプレートからプロジェクトを作成する

最も早く開始する方法は、認証が事前に構成された新しいプロジェクトをスキャフォールディングすることです。

次のコマンドを実行して、単一組織認証を使用して新しい Web アプリを作成し、プロジェクト ディレクトリに移動します。

dotnet new webapp --auth SingleOrg --name MyWebApp
cd MyWebApp

テンプレートは、Microsoft.Identity.Web が既に構成されたプロジェクトを生成します。 アプリの登録の詳細のみを指定する必要があります。

appsettings.json開き、プレースホルダーの値をアプリ登録のアプリケーション (クライアント) IDディレクトリ (テナント) ID に置き換えます。

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "your-tenant-id",
    "ClientId": "your-client-id",
    "CallbackPath": "/signin-oidc"
  }
}

アプリケーションを起動して、サインインが機能することを確認します。

dotnet run

https://localhost:5001に移動し、[サインイン] を選択します。 Microsoftサインイン プロンプトが表示された場合、構成は正しいです。

既存の Web アプリに認証を追加する

既存の ASP.NET Core アプリがある場合は、Microsoft Entra サインインを追加するために次の手順に従ってください。

NuGet パッケージのインストール

Microsoft.Identity.Web ライブラリを追加します。 Microsoft.Identity.Web パッケージは認証を処理し、Microsoft.Identity.Web.UI は事前構築済みのサインインとサインアウトの UI コンポーネントを提供します。

dotnet add package Microsoft.Identity.Web
dotnet add package Microsoft.Identity.Web.UI

認証サービスを構成する

Program.csを開き、認証サービスを追加します。 次のコードは、OpenID Connect 認証をMicrosoft Entraに登録し、ダウンストリーム API 呼び出しのトークン取得を有効にして、サインイン/サインアウト UI を追加します。

using Microsoft.Identity.Web;
using Microsoft.Identity.Web.UI;

var builder = WebApplication.CreateBuilder(args);

// Add authentication
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
                .AddMicrosoftIdentityWebApp(builder.Configuration, "AzureAd")
                .EnableTokenAcquisitionToCallDownstreamApi() // Optional: if calling APIs
                .AddInMemoryTokenCaches(); // For production, use distributed cache

// Add Razor Pages or MVC
builder.Services.AddRazorPages()
    .AddMicrosoftIdentityUI(); // Adds sign-in/sign-out UI

var app = builder.Build();

// Configure middleware
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();

app.UseAuthentication(); //  Add authentication middleware
app.UseAuthorization();

app.MapRazorPages();
app.MapControllers();

app.Run();

Microsoft Entra構成の追加

appsettings.jsonを開き、AzureAd セクションを追加します。 プレースホルダーの値をアプリ登録の アプリケーション (クライアント) ID に置き換えます。 TenantIdをアプリの適切な対象ユーザーに設定します。

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "common",
    "ClientId": "your-client-id-from-app-registration",
    "CallbackPath": "/signin-oidc"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Identity.Web": "Information"
    }
  }
}

TenantId値によって、サインインできるアカウントが決まります。

価値 承認済みアカウント
common 職場/学校アカウントと個人用Microsoft アカウント
organizations 職場/学校アカウントのみ
consumers 個人用 Microsoft アカウントのみ
<your-tenant-id> シングルテナント — 貴社のみ

ページを保護する

サインインが必要なページまたはコントローラーに [Authorize] 属性を追加します。

Razor Pages の場合、 [Authorize] 属性は認証されていないユーザーをサインイン ページにリダイレクトします。 サインイン後、Name オブジェクトを通じて、preferred_usernameUserなどのユーザー要求を使用できるようになります。

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc.RazorPages;

[Authorize] //  Require authentication
public class IndexModel : PageModel
{
    public void OnGet()
    {
        var userName = User.Identity?.Name;
        var userEmail = User.FindFirst("preferred_username")?.Value;
    }
}

MVC コントローラーの場合、同じ [Authorize] 属性がコントローラーまたはアクション レベルで適用されます。

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

[Authorize] //  Require authentication
public class HomeController : Controller
{
    public IActionResult Index()
    {
        var userName = User.Identity?.Name;
        return View();
    }
}

ユーザーがサインインおよびサインアウトできるように、ナビゲーション リンクをレイアウトに追加します。MicrosoftIdentity エリア ルートは、Microsoft.Identity.Web.UI パッケージによって提供されます。 次の Razor マークアップは、ユーザーの認証状態に基づいて 、条件付きでサインアウト または サインイン をレンダリングします。

<ul class="navbar-nav">
    @if (User.Identity?.IsAuthenticated == true)
    {
        <li class="nav-item">
            <span class="nav-link">Hello @User.Identity.Name!</span>
        </li>
        <li class="nav-item">
            <a class="nav-link" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
        </li>
    }
    else
    {
        <li class="nav-item">
            <a class="nav-link" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
        </li>
    }
</ul>

実行してテストする

アプリケーションを起動して、認証が機能することを確認します。

dotnet run

https://localhost:5001 に移動します。 [サインイン] リンクが表示されます。 これを選択して、Microsoftサインイン フローが正常に完了したことを確認します。

アプリケーションの登録

アプリの登録がまだない場合は、次の手順に従って、Azure ポータルで作成します。

  1. Azure portal にサインインします。
  2. Microsoft Entra ID>アプリの登録>New registration に移動します。
  3. 表示名 ("My Web App" など) を入力します。
  4. サポートされているアカウントの種類を選択します。
    • シングル テナント - 組織内のユーザーのみ
    • マルチテナント - 任意の組織のユーザー
    • マルチテナント + 個人用 — すべてのMicrosoft アカウント
  5. [ リダイレクト URI] で、プラットフォームを Web に設定し、「 https://localhost:5001/signin-oidc」と入力します。
  6. 登録を選択します。
  7. 概要ページで、 アプリケーション (クライアント) IDディレクトリ (テナント) ID をコピーします。 これらの値は、ClientIdTenantId フィールドとappsettings.json フィールドに必要です。

オプション設定を構成する

シナリオでは、これらの追加設定が必要になる場合があります。

ID トークンの発行を有効にする — 一部のハイブリッド認証シナリオでは、承認エンドポイントから直接 ID トークンを発行する必要があります。 承認コード フロー (Microsoft.Identity.Web によって使用される) は推奨される方法です。 シナリオで特に必要な場合にのみ、この設定を有効にします。

  1. アプリの登録で、[ 認証] に移動します。
  2. [ 暗黙的な許可とハイブリッド フロー] で、[ ID トークン] を選択します。
  3. 保存を選びます。

Note

暗黙的な許可フローは、レガシ フローです。 Microsoftでは、すべての新しいアプリケーションに対して PKCE を使用した承認コード フローが推奨されます。 詳細については、Microsoft ID プラットフォーム ドキュメントを参照してください。

フロントエンド チャネル ログアウト URL の構成 — ユーザーがMicrosoft Entraからサインアウトしたときにアプリからサインアウトされることを確認します。

  1. アプリの登録で、[ 認証] に移動します。
  2. [Front-channel logout URL] に「https://localhost:5001/signout-oidc」と入力します。
  3. 保存を選びます。

一般的なエラーのトラブルシューティング

サインイン中に問題が発生した場合は、次の一般的なエラーを確認してください。

エラー 原因 ソリューション
AADSTS50011: 応答アドレスが登録されていません コードとアプリの登録の間のリダイレクト URI の不一致 アプリ登録のリダイレクト URI が CallbackPath と一致することを確認します (既定では/signin-oidc )
AADSTS700016: アプリケーションが見つかりません 構成の ClientId が正しくありません appsettings.jsonアプリの登録と一致することを確認します
権限設定エラー InstanceまたはTenantIdがないか無効です。 Instancehttps://login.microsoftonline.com/に設定し、TenantIdが有効であることを確認します