Documentation Index Fetch the complete documentation index at: https://auth0-feat-ionic-capacitor-quickstart-modernization.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
ASP.NET Coreの実装で使用する全ソースコードは、こちらのGitHubリポジトリ でご覧いただけます。
クッキーおよびOIDCミドルウェアを構成する
このガイドの目的のために、シンプルなホスト型ログインを使用します。標準クッキーと、ASP.NET Coreで利用できるOIDCミドルウェアを使用できるため、NuGetパッケージをインストールしてください。
Install-Package Microsoft.AspNetCore.Authentication.Cookies
Install-Package Microsoft.AspNetCore.Authentication.OpenIdConnect
その後、アプリケーションのミドルウェアパイプライン内でクッキーとOIDCミドルウェアを構成します。
上記のコードでは、2つの異なるタイプの認証ミドルウェアを構成しました。
1つ目は、UseCookieAuthenticationの呼び出しに登録されたクッキーミドルウェアです。2つ目は、UseOpenIdConnectAuthenticationの呼び出しで実行されるOIDCミドルウェアです。
ユーザーがOIDCミドルウェアを使用してAuth0にサインインすると、ユーザーの情報はセッションクッキー内に自動的に保存されます。上記の通りにミドルウェアを構成するだけで、ユーザーセッションは管理されます。
OpenID Connect(OIDC)ミドルウェアはまた、ユーザーが認証されたらAuth0から送信されるIDトークンからクレームすべてを抽出し、それをClaimsIdentityのクレームとして追加します。
ログアウトを実装する
AuthenticationManagerクラスのSignOutAsyncメソッドを使用し、サインアウトしたい認証スキームを伝えて、アプリケーションセッションとAuth0セッションの両方をコントロールできます。
クッキーミドルウェアのサインアウトと、それによるアプリケーションの認証クッキーの消去の例として、以下の呼び出しを作成できます。
await HttpContext . Authentication . SignOutAsync ( CookieAuthenticationDefaults . AuthenticationScheme );
同様に、SignOutAsyncメソッドを呼び出し、サインアウトするために認証スキームとしてAuth0を伝えることで、ユーザーをAuth0からログアウトできます。
await HttpContext . Authentication . SignOutAsync ( "Auth0" );
ただし上記が機能するためには、OnRedirectToIdentityProviderForSignOutイベントを処理して、OIDCミドルウェアを登録するときに別の構成を追加する必要があります。イベント内で、Auth0クッキーを消去するAuth0ログアウトエンドポイント にリダイレクトする必要があります。
app . UseOpenIdConnectAuthentication ( new OpenIdConnectOptions ( "Auth0" )
{
// Some code omitted for brevity
Events = new OpenIdConnectEvents
{
OnRedirectToIdentityProviderForSignOut = context =>
{
context . Response . Redirect ( $"https:// { auth0Settings . Value . Domain } /v2/logout?client_id= { auth0Settings . Value . ClientId } &returnTo= { context . Request . Scheme } :// { context . Request . Host } /" );
context . HandleResponse ();
return Task . FromResult ( 0 );
}
}
});
また、Auth0 Dashboard 内のアプリケーションのために、アプリケーションのURLを [Allowed Logout URLs(許可されているログアウトURL)] に追加する必要があります。詳細については、ログアウト を参照してください。
管理者権限の実装
グループをASP.NET Coreアプリケーションに組み入れる最も簡単な方法は、ASP.NET Coreで利用可能な組み込みのロールベースの認可 を使用することです。これを達成するには、ユーザーが割り当てられるそれぞれのグループについて、
http://schemas.microsoft.com/ws/2008/06/identity/claims/role
上記タイプのクレームを追加する必要があります。
クレームが追加されたら、クレームを[Authorize(Roles = "Admin")]属性で装飾することで、簡単に特定のアクションをAdminのみに利用可能にできます。また、コントローラー内でUser.IsInRole("Admin")を呼び出して、ユーザーがコードの特定のロールかどうかを確認できます。
ASP.NET OIDCミドルウェアは、JWT で返されたすべてのクレームを、クレームとしてClaimsIdentityに自動的に追加します。このため、authorizationクレームから情報を抽出し、クレームのJSONボディーを逆シリアル化して、グループごとに、http://schemas.microsoft.com/ws/2008/06/identity/claims/roleクレームをClaimsIdentityに追加する必要があります。
app . UseOpenIdConnectAuthentication ( new OpenIdConnectOptions ( "Auth0" )
{
// Some configuration omitted for brevity
Events = new OpenIdConnectEvents
{
OnTicketReceived = context =>
{
var options = context . Options as OpenIdConnectOptions ;
// Get the ClaimsIdentity
var identity = context . Principal . Identity as ClaimsIdentity ;
if ( identity != null )
{
// Add the groups as roles
var authzClaim = context . Principal . FindFirst ( c => c . Type == "authorization" );
if ( authzClaim != null )
{
var authorization = JsonConvert . DeserializeObject < Auth0Authorization >( authzClaim . Value );
if ( authorization != null )
{
foreach ( var group in authorization . Groups )
{
identity . AddClaim ( new Claim ( ClaimTypes . Role , group , ClaimValueTypes . String , options . Authority ));
}
}
}
}
return Task . FromResult ( 0 );
}
}
});
その後、管理者にタイムシートの承認を許可するアクションを追加できます。
[ Authorize ( Roles = "Admin" )]
public IActionResult TimesheetApproval ()
{
return View ();
}