2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ASP.NET Coreで外部認証情報をDB管理しない場合に利用すべきUIライブラリ

Last updated at Posted at 2021-05-06

要約

ASP.NET Core Webアプリケーションを作成する際の要件として

  • 外部認証を利用する
  • 認証情報のDB管理はしない

この2点がある場合、認証まわりのUIには「ASP.NET Core Identity」ではなく「Microsoft Identity Web UI」を利用すべきです。

ASP.NET Core Identity

ASP.NET Core Identityは、以下の機能を提供するライブラリです。

  • 認証まわりのUI
  • 認証情報のDB管理

注意すべきは、このライブラリが__「認証情報のDB管理」機能の利用を前提__としている点です。

認証情報のDB管理機能は除外が困難

「外部認証を利用するけど認証情報のDB管理はしない」というケースにおいて、「ASP.NET Core IdentityのUI機能だけ利用してDB管理機能は無効化する」というアプローチは実装が困難です。

調べればやり方は出てくるかもしれませんが、ライブラリの内部構造に依存した作りになってしまうため、このアプローチは推奨しません。

Microsoft Identity Web UI

認証まわりのUIだけを利用したい場合は、Microsoft Identity Web UIがオススメです。

これはMicrosoft Identity Web(OpenID Connect認証ライブラリ)に付随して作られたUIライブラリです。

OpenID Connectの場合

外部認証のプロトコルがOpenID Connectの場合は、Microsoft Identity Webと合わせてMicrosoft Identity Web UIをそのまま利用できます。

それ以外の場合

外部認証のプロトコルがOpenID Connect以外の場合、Microsoft Identity Webは使えないため、認証機能の実装には他のライブラリを利用することになります。

そしてMicrosoft Identity Web UIを利用する際も注意点があり、サインイン・サインアウトのリンクを作る際に「schemeパラメータ」が必要になります。

こちらのソースコードにあるAccountControllerのSignIn()およびSignOut()を利用するのですが、schemeパラメータを渡さない場合はデフォルトでOpenID Connectの処理をする仕様になっています。

そのため、それ以外のプロトコルを利用する場合は、schemeパラメータにプロトコルを指定してリンクを作る必要があります。具体例として、WS-Federationの場合は以下のようになります(こちらのライブラリが別途必要です)。

Pages/Shared/_LoginPartial.cshtml
+@using Microsoft.AspNetCore.Authentication.WsFederation
 // 省略
-            <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut">Sign out</a>
+            <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignOut" asp-route-scheme="@WsFederationDefaults.AuthenticationScheme">Sign out</a>
 // 省略
-            <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn">Sign in</a>
+            <a class="nav-link text-dark" asp-area="MicrosoftIdentity" asp-controller="Account" asp-action="SignIn" asp-route-scheme="@WsFederationDefaults.AuthenticationScheme">Sign in</a>
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?