このクイックスタートでは、Microsoft.Identity.Web を使用してMicrosoft Entra IDでユーザーをサインインさせるASP.NET Core Webアプリを作成します。 テンプレートから新しいプロジェクトをスキャフォールディングするか、既存のアプリに認証を追加できます。
Microsoft Entra テナントがない場合は、開始する前に、free アカウントを作成します。
前提条件
- .NET 9 SDK
- Microsoft Entra ID テナント
- Microsoft Entra テナントでのアプリの登録。 作成する必要がある場合は、「 アプリケーションの登録」を参照してください。
テンプレートからプロジェクトを作成する
最も早く開始する方法は、認証が事前に構成された新しいプロジェクトをスキャフォールディングすることです。
次のコマンドを実行して、単一組織認証を使用して新しい 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_usernameやUserなどのユーザー要求を使用できるようになります。
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 ポータルで作成します。
- Azure portal にサインインします。
- Microsoft Entra ID>アプリの登録>New registration に移動します。
- 表示名 ("My Web App" など) を入力します。
- サポートされているアカウントの種類を選択します。
- シングル テナント - 組織内のユーザーのみ
- マルチテナント - 任意の組織のユーザー
- マルチテナント + 個人用 — すべてのMicrosoft アカウント
- [ リダイレクト URI] で、プラットフォームを Web に設定し、「
https://localhost:5001/signin-oidc」と入力します。 - 登録を選択します。
- 概要ページで、 アプリケーション (クライアント) ID と ディレクトリ (テナント) ID をコピーします。 これらの値は、
ClientIdのTenantIdフィールドとappsettings.jsonフィールドに必要です。
オプション設定を構成する
シナリオでは、これらの追加設定が必要になる場合があります。
ID トークンの発行を有効にする — 一部のハイブリッド認証シナリオでは、承認エンドポイントから直接 ID トークンを発行する必要があります。 承認コード フロー (Microsoft.Identity.Web によって使用される) は推奨される方法です。 シナリオで特に必要な場合にのみ、この設定を有効にします。
- アプリの登録で、[ 認証] に移動します。
- [ 暗黙的な許可とハイブリッド フロー] で、[ ID トークン] を選択します。
- 保存を選びます。
Note
暗黙的な許可フローは、レガシ フローです。 Microsoftでは、すべての新しいアプリケーションに対して PKCE を使用した承認コード フローが推奨されます。 詳細については、Microsoft ID プラットフォーム ドキュメントを参照してください。
フロントエンド チャネル ログアウト URL の構成 — ユーザーがMicrosoft Entraからサインアウトしたときにアプリからサインアウトされることを確認します。
- アプリの登録で、[ 認証] に移動します。
-
[Front-channel logout URL] に「
https://localhost:5001/signout-oidc」と入力します。 - 保存を選びます。
一般的なエラーのトラブルシューティング
サインイン中に問題が発生した場合は、次の一般的なエラーを確認してください。
| エラー | 原因 | ソリューション |
|---|---|---|
| AADSTS50011: 応答アドレスが登録されていません | コードとアプリの登録の間のリダイレクト URI の不一致 | アプリ登録のリダイレクト URI が CallbackPath と一致することを確認します (既定では/signin-oidc ) |
| AADSTS700016: アプリケーションが見つかりません | 構成の ClientId が正しくありません |
のappsettings.jsonアプリの登録と一致することを確認します |
| 権限設定エラー |
InstanceまたはTenantIdがないか無効です。 |
Instanceをhttps://login.microsoftonline.com/に設定し、TenantIdが有効であることを確認します |