適用対象:
ワークフォース テナント (詳細)
この記事では、ユーザーをサインインさせる Web アプリのコードを構成する方法について説明します。
[前提条件]
- アクティブなサブスクリプションを持つ Azure アカウント。
無料でアカウントを作成できます。 このアカウントには、アプリケーションを管理するためのアクセス許可が必要です。 アプリケーションを登録するために必要な次のロールのいずれかを使用します。
- アプリケーション管理者
- アプリケーション開発者
-
この組織のディレクトリ内のアカウント専用に構成された Microsoft Entra 管理センターに新しいアプリを登録します。 詳細については、「 アプリケーションの登録 」を参照してください。 後で使用するために、アプリケーション の [概要 ] ページから次の値を記録します。
- アプリケーション (クライアント) ID
- ディレクトリ (テナント) ID
- アプリケーションのリダイレクト URI を構成します。 以下のタブを使用して、プラットフォームのリダイレクト URI を見つけます。 一部の場合は、クライアント シークレットの構成も必要になる場合があります。 詳細については、「 アプリケーションにリダイレクト URI を追加する方法 」を参照してください。
Web プラットフォームの種類を選択し、ASP.NET Core Web アプリに次の URI を使用します
-
リダイレクト URI :
https://localhost:44321/signin-oidc -
フロント チャネル ログアウト URL :
https://localhost:44321/signout-oidc
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 | 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 ノード | 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 は、/signin-oidc で定義されているように appsettings.json となります。
同様に、サインアウト 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 以下に関します。
Note
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.UINuGet パッケージが存在する場合は削除します。ConfigureServicesメソッドとAddMicrosoftIdentityWebAppメソッドを使用するようにAddMicrosoftIdentityUIのコードを更新します。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();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 に関するページを参照してください。