ユーザーをサインインさせる Web アプリ:コード構成
この記事では、ユーザーをサインインさせる Web アプリのコードを構成する方法について説明します。
Web アプリをサポートしている Microsoft ライブラリ
次の Microsoft ライブラリは、Web アプリ (および Web API) を保護するために使用されます。
言語/フレームワーク | プロジェクト GitHub |
Package | 取得 started |
ユーザーのサインイン | Web API へのアクセス | 一般提供 (GA) または パブリック プレビュー1 |
---|---|---|---|---|---|---|
.NET | MSAL.NET | Microsoft.Identity.Client | — | GA | ||
.NET | Microsoft.IdentityModel | Microsoft.IdentityModel | — | 2 | 2 | GA |
ASP.NET Core | ASP.NET Core | Microsoft.AspNetCore.Authentication | クイックスタート | GA | ||
ASP.NET Core | Microsoft.Identity.Web | Microsoft.Identity.Web | クイックスタート | GA | ||
Java | MSAL4J | msal4j | クイックスタート | GA | ||
Spring | spring-cloud-azure-starter-active-directory | spring-cloud-azure-starter-active-directory | チュートリアル | GA | ||
Node.js | MSAL Node | msal-node | クイックスタート | GA | ||
Python | MSAL Python | msal | GA | |||
Python | identity | identity | クイックスタート | -- |
(1) オンライン サービスのユニバーサル ライセンス条項は、"パブリック プレビュー" のライブラリに適用されます。
(2)Microsoft.IdentityModel ライブラリはトークンの "検証" のみを行います。ID やアクセス トークンを要求することはできません。
目的のプラットフォームに対応するタブを選択してください。
この記事および以下のコード スニペットは、ASP.NET Core Web アプリ増分チュートリアルの第 1 章から抜粋されています。
完全な実装の詳細については、このチュートリアルをご覧ください。
構成ファイル
Microsoft ID プラットフォームを使用してユーザーをサインインさせる Web アプリケーションは、構成ファイルを使用して構成します。 これらのファイルでは、次の値を指定する必要があります。
- クラウド インスタンス (たとえば、アプリを国内のクラウドで実行する場合など)。 次のようなさまざまなオプションがあります。
https://login.microsoftonline.com/
: Azure パブリック クラウドの場合https://login.microsoftonline.us/
: Azure US Government の場合https://login.microsoftonline.de/
: Microsoft Entra Germany の場合https://login.partner.microsoftonline.cn/common
: 21Vianet が運用する Microsoft Entra China の場合
- テナント ID のオーディエンス。 オプションは、アプリがシングル テナントかマルチテナントかによって異なります。
- Azure portal から取得したテナント GUID: 組織内のユーザーをサインインする場合。 ドメイン名も使用できます。
organizations
: ユーザーを職場または学校のアカウントにサインインさせる場合common
: ユーザーを職場または学校のアカウント、あるいは Microsoft の個人用アカウントでサインインさせる場合consumers
: ユーザーを Microsoft の個人用アカウントでのみサインインさせる場合
- Azure portal からコピーした、アプリケーションのクライアント ID
また、authority、すなわちインスタンス と テナント ID の値の連結への参照が表示される場合もあります。
ASP.NET Core では、これらの設定は appsettings.json ファイルの "Microsoft Entra ID" セクションにあります。
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "[Enter the tenantId here]",
// Client ID (application ID) obtained from the Azure portal
"ClientId": "[Enter the Client Id here]",
"CallbackPath": "/signin-oidc",
"SignedOutCallbackPath": "/signout-oidc"
}
}
ASP.NET Core では、別のファイル (properties\launchSettings.json) がアプリケーションの URL (applicationUrl
) と TLS/SSL ポート (sslPort
) およびさまざまなプロファイルを含んでいます。
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:3110/",
"sslPort": 44321
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"webApp": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
},
"applicationUrl": "http://localhost:3110/"
}
}
}
Azure portal では、アプリケーションの [認証] ページで登録するリダイレクト URI は、これらの URL と一致している必要があります。 前記の 2 つの構成ファイルについては、それは https://localhost:44321/signin-oidc
です。 この理由は applicationUrl
が http://localhost:3110
である一方で、sslPort
が指定されているためです (44321
)。 CallbackPath
は、appsettings.json
で定義されているように /signin-oidc
となります。
同様に、サインアウト URI は https://localhost:44321/signout-oidc
に設定されます。
Note
SignedOutCallbackPath は、イベントの処理時の競合を回避するために、ポータルまたはアプリケーションに設定する必要があります。
初期化コード
初期化コードは、プラットフォームによって異なります。 ASP.NET Core と ASP.NET の場合、ユーザーのサインインは OpenID Connect ミドルウェアに委任されます。 ASP.NET または ASP.NET Core テンプレートを使用すると、Azure AD v1.0 エンドポイント用の Web アプリケーションが生成されます。 それを Microsoft ID プラットフォームに適合させるには、少し構成が必要です。
ASP.NET Core Web Apps (および Web API) では、コントローラーまたはコントローラー アクションでの Authorize
属性があるため、アプリケーションは保護されます。 この属性では、ユーザーが認証されていることが確認されます。 .NET 6 のリリースより前では、初期化コードは、Startup.cs ファイルにありました。 .NET 6 を使用する新しい ASP.NET Core プロジェクトには、Startup.cs ファイルは含まれません。 代わりに、Program.cs ファイルがあります。 このチュートリアルの残りの部分は、.NET 5 以下に関します。
注意
Microsoft.Identity.Web を活用する、Microsoft ID プラットフォーム用の新しい ASP.NET Core テンプレートを直接開始する場合は、.NET 5.0 用のプロジェクト テンプレートを含むプレビュー NuGet パッケージをダウンロードできます。 インストールが完了したら、ASP.NET Core Web アプリケーション (MVC または Blazor) を直接インスタンス化できます。 詳細については、Microsoft.Identity.Web Web アプリ プロジェクト テンプレートに関するページを参照してください。 以下のすべての手順をあなたの代わりに実行するため、これが最も簡単な方法です。
Visual Studio 内で現在の既定 ASP.NET Core Web プロジェクトを使用するか、dotnet new mvc --auth SingleOrg
または dotnet new webapp --auth SingleOrg
を使用してプロジェクトを開始すると、次のようなコードが表示されます。
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
このコードでは、Azure Active Directory v1.0 アプリケーションの作成に使用される従来の Microsoft.AspNetCore.Authentication.AzureAD.UI NuGet パッケージを使用します。 この記事では、そのコードに代わる Microsoft ID プラットフォーム v2.0 アプリケーションを作成する方法について説明します。
Microsoft.Identity.Web および Microsoft.Identity.Web.UI NuGet パッケージをプロジェクトに追加します。
Microsoft.AspNetCore.Authentication.AzureAD.UI
NuGet パッケージが存在する場合は削除します。AddMicrosoftIdentityWebApp
メソッドとAddMicrosoftIdentityUI
メソッドを使用するようにConfigureServices
のコードを更新します。public class Startup { ... // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApp(Configuration, "AzureAd"); services.AddRazorPages().AddMvcOptions(options => { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); options.Filters.Add(new AuthorizeFilter(policy)); }).AddMicrosoftIdentityUI();
Startup.cs の
Configure
メソッドで、app.UseAuthentication();
とapp.MapControllers();
を呼び出して認証を有効にします。// This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { // more code here app.UseAuthentication(); app.UseAuthorization(); app.MapRazorPages(); app.MapControllers(); // more code here }
このコードでは:
AddMicrosoftIdentityWebApp
拡張メソッドは、Microsoft.Identity.Web で定義されています。これにより以下が行なわれます。- 構成ファイルを読み取るためのオプションが構成されます (ここでは、"Microsoft Entra ID" セクションから)。
- 機関が Microsoft ID プラットフォームになるように OpenID Connect オプションが構成されます。
- トークンの発行者が検証されます。
- 名前に対応する要求が、ID トークンの
preferred_username
要求からマップされるようにします。
構成オブジェクトに加えて、
AddMicrosoftIdentityWebApp
を呼び出すときに構成セクションの名前を指定できます。 既定では、これはAzureAd
です。AddMicrosoftIdentityWebApp
には、高度なシナリオのためのその他のパラメーターがあります。 たとえば、OpenID Connect ミドルウェア イベントをトレースすると、認証が機能しない場合の Web アプリケーションのトラブルシューティングに役立ちます。 省略可能なパラメーターsubscribeToOpenIdConnectMiddlewareDiagnosticsEvents
をtrue
に設定すると、HTTP 応答からHttpContext.User
内のユーザーの ID への進行に合わせて、ASP.NET Core ミドルウェアのセットによって情報がどのように処理されるかが表示されます。AddMicrosoftIdentityUI
拡張メソッドは、Microsoft.Identity.Web.UI に定義されています。 サインインおよびサインアウトを処理する既定のコントローラーが提供されます。
Microsoft.Identity.Web で Web アプリを作成する方法の詳細については、microsoft-identity-web の Web Apps に関するページを参照してください。