次の方法で共有


ASP.NET Core認証の概要

By Mike Rousos

認証は、ユーザーの ID を決定するプロセスです。 Authorization は、ユーザーがリソースにaccessしているかどうかを判断するプロセスです。 ASP.NET Coreでは、認証は認証サービス IAuthenticationService によって処理されます。これは認証middlewareで使用されます。 認証サービスは、登録済みの認証ハンドラーを使用して、認証関連のアクションを完了します。 認証関連のアクションの例を次に示します。

  • ユーザーを認証する。
  • 認証されていないユーザーが制限されたリソースをaccessしようとしたときに応答する。

登録済みの認証ハンドラーとその構成オプションは、"スキーム" と呼ばれます。

認証方式は に認証サービスを登録することによって指定されます。

  • の呼び出しの後にスキーム固有の拡張メソッド ( や など) を呼び出すことによって行います。 これらの拡張メソッドは を使用してスキームを適切な設定で登録します。
  • あまり一般的ではない方法として、 を直接呼び出すことがあります。

たとえば、次のコードでは、 と JWT ベアラー認証スキームの認証サービスとハンドラーが登録されます。

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("JwtSettings", options))
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("CookieSettings", options));

パラメーター は、特定のスキームが要求されていない場合に既定で使用されるスキームの名前です。

複数のスキームが使用される場合、認可ポリシー (または認可属性) で、ユーザーの認証時に使用する認証スキーム (複数可) を指定することができます。 上記の例では、 認証スキームを使用する場合に名前を指定しています (既定では ですが、 を呼び出すときに別の名前を指定することもできます)。

場合によっては、 の呼び出しが、他の拡張メソッドによって自動的に行われます。 たとえば、ASP.NET Core Identity を使用すると、AddAuthentication が内部で呼び出されます。

認証ミドルウェアは、 で を呼び出すことによって追加されます。 を呼び出すと、以前に登録された認証スキームを使用するミドルウェアが登録されます。 認証されているユーザーに依存するすべてのミドルウェアの前に を呼び出します。

認証の概念

認証には、アクセス許可の決定を行う認可用の を提供する役割があります。 正しいクレーム セットを生成する役割がある認証ハンドラーを選択するには、複数の認証スキームの手法があります。

  • 認証スキーム
  • 既定の認証スキーム。これについては、次の 2 つのセクションで説明します。
  • を直接設定します。

1 つの認証スキームしか登録されていない場合は、それが既定のスキームになります。 複数のスキームが登録されており、既定のスキームが指定されていない場合は、Authorize 属性でスキームを指定する必要があります。そうしないと、次のエラーがスローされます。

InvalidOperationException: authenticationScheme が指定されておらず、DefaultAuthenticateScheme が見つかりませんでした。 既定のスキームは、AddAuthentication(string defaultScheme) または AddAuthentication(ActionAuthenticationOptions configureOptions) のいずれかを使用して設定できます。

DefaultScheme

1 つの認証スキームのみが登録されている場合、その 1 つの認証スキームは次のようになります。

  • として自動的に使用されます。
  • または 内に を指定する必要がなくなります。

1 つの認証スキームが として自動的に使用されないようにするには、 を呼び出します。

認証スキーム

認証スキームでは、正しいクレーム セットを生成する役割がある認証ハンドラーを選択できます。 詳細については、特定のスキームでの承認に関するページを参照してください。

認証スキームは、次のものに対応する名前です。

  • 認証ハンドラー。
  • ハンドラーの特定のインスタンスを構成するためのオプション。

スキームは、関連付けられたハンドラーの認証、チャレンジ、禁止動作を参照するためのメカニズムとして役立ちます。 たとえば、認証ポリシーでは、スキーム名を使用して、ユーザーの認証に使用する認証スキーム (またはスキーム) を指定できます。 認証を構成する場合は、既定の認証スキームを指定するのが一般的です。 リソースが特定のスキームを要求しない限り、既定のスキームが使用されます。 また、次のことも可能です。

  • 認証、チャレンジ、禁止アクションに使用する別の既定のスキームを指定する。
  • ポリシー スキームを使用して、複数のスキームを 1 つに結合する。

認証ハンドラー

認証ハンドラーは:

  • スキームの動作を実装する型です。
  • または から派生しています。
  • ユーザーを認証するための主要な役割を担います。

認証スキームの構成と受信要求コンテキストに基づき、認証ハンドラーは:

  • 認証 成功した場合に、ユーザーの ID を表すオブジェクトを構築します。
  • 認証に失敗した場合は、'no result' または 'failure' を返します。
  • ユーザーがリソースをaccessしようとしたときのチャレンジアクションと禁止アクションのメソッドがあります。
    • 彼らはアクセスが禁止されています。
    • 認証されていない場合(チャレンジ)。

は、リモート認証手順を必要とする認証のクラスです。 リモート認証手順が完了すると、ハンドラーはハンドラーによって設定された にコールバックします。 ハンドラーは、 コールバック パスに渡される情報を使用して認証手順を完了します。 OAuth 2.0OIDC はどちらもこのパターンを使用します。 JWT とCookie は、ベアラー ヘッダーと を直接使用して認証できるため、そうではありません。 この場合、リモートでホストされるプロバイダーは、

  • 認証プロバイダーになります。
  • たとえば、Facebook、Twitter、Google、Microsoft、およびハンドラー メカニズムを使用してユーザーの認証を処理するその他の OIDC プロバイダーがあります。

認証

認証スキームの認証アクションは、要求コンテキストに基づいてユーザーの ID を構築する役割を担います。 認証が成功したかどうかを示す が返され、成功した場合は認証チケット内のユーザーの ID が返されます。 を参照してください。 認証の例を以下に示します。

  • Cookie からユーザーの ID を構築する 認証スキーム。
  • ユーザーの ID を構築するために JWT ベアラー トークンを逆シリアル化および検証する JWT ベアラー スキーム。

課題

認証チャレンジは、認証されていないユーザーが認証を必要とするエンドポイントを要求したときに、認可によって呼び出されます。 認証チャレンジが発行されるのは、匿名ユーザーが制限されたリソースを要求した場合や、ログイン リンクにアクセスした場合などです。 承認では、指定した認証スキームを使用してチャレンジが呼び出されます。指定されていない場合は既定値が呼び出されます。 を参照してください。 認証チャレンジの例を次に示します。

  • ログイン ページにユーザーをリダイレクトする 認証スキーム。
  • 401 の結果を返す JWT のベアラー・スキーム、 ヘッダー付き。

チャレンジ アクションでは、要求されたリソースをaccessするために使用する認証メカニズムをユーザーに知らせる必要があります。

禁止

認証スキームの禁止アクションは、認証されたユーザーがaccessが許可されていないリソースをaccessしようとしたときに、Authorization によって呼び出されます。 を参照してください。 認証の禁止の例を次に示します。

  • accessが禁止されたことを示すページにユーザーをリダイレクトする cookie 認証スキーム。
  • 403 結果を返す JWT ベアラースキーム。
  • ユーザーがリソースへのaccessを要求できるページにリダイレクトするカスタム認証スキーム。

禁止アクションを使用すると、ユーザーは次のことを知ることができます。

  • 認証されている。
  • 要求されたリソースにアクセスすることは許可されていません。

チャレンジと禁止の違いについては、次のリンクを参照してください。

  • 運用リソースハンドラーで操作や禁止を行う。
  • チャレンジと禁止の違い。

テナントごとの認証プロバイダー

ASP.NET Coreには、マルチテナント認証用の組み込みソリューションがありません。 組み込み機能を使用して作成することは可能ですが、マルチテナント認証では Orchard CoreABP Framework、または Finbuckle.MultiTenant を検討することをお勧めします。

Orchard Core とは:

  • ASP.NET Coreを使用して構築されたオープン ソース、モジュール式、マルチテナントのアプリ フレームワーク。
  • そのアプリ フレームワークの上に構築されたコンテンツ管理システム (CMS) です。

テナントごとの認証プロバイダーの例については、Orchard Core ソースを参照してください。

ABP Framework では、モジュール性、マイクロサービス、ドメイン駆動設計、マルチテナントなど、さまざまなアーキテクチャ パターンがサポートされています。 GitHub の ABP Framework ソースを参照してください。

Finbuckle.MultiTenant:

  • オープンソース
  • テナント問題の解決を提供する
  • 軽量
  • データの分離を提供する
  • テナントごとにアプリの動作を一意に構成する

その他のリソース

By Mike Rousos

認証は、ユーザーの ID を決定するプロセスです。 Authorization は、ユーザーがリソースにaccessしているかどうかを判断するプロセスです。 ASP.NET Coreでは、認証は認証サービス IAuthenticationService によって処理されます。これは認証middlewareで使用されます。 認証サービスは、登録済みの認証ハンドラーを使用して、認証関連のアクションを完了します。 認証関連のアクションの例を次に示します。

  • ユーザーを認証する。
  • 認証されていないユーザーが制限されたリソースをaccessしようとしたときに応答する。

登録済みの認証ハンドラーとその構成オプションは、"スキーム" と呼ばれます。

認証方式は に認証サービスを登録することによって指定されます。

  • の呼び出しの後にスキーム固有の拡張メソッド ( や など) を呼び出すことによって行います。 これらの拡張メソッドは を使用してスキームを適切な設定で登録します。
  • あまり一般的ではない方法として、 を直接呼び出すことがあります。

たとえば、次のコードでは、 と JWT ベアラー認証スキームの認証サービスとハンドラーが登録されます。

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("JwtSettings", options))
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options => builder.Configuration.Bind("CookieSettings", options));

パラメーター は、特定のスキームが要求されていない場合に既定で使用されるスキームの名前です。

複数のスキームが使用される場合、認可ポリシー (または認可属性) で、ユーザーの認証時に使用する認証スキーム (複数可) を指定することができます。 上記の例では、 認証スキームを使用する場合に名前を指定しています (既定では ですが、 を呼び出すときに別の名前を指定することもできます)。

場合によっては、 の呼び出しが、他の拡張メソッドによって自動的に行われます。 たとえば、ASP.NET Core Identity を使用すると、AddAuthentication が内部で呼び出されます。

認証ミドルウェアは、 で を呼び出すことによって追加されます。 を呼び出すと、以前に登録された認証スキームを使用するミドルウェアが登録されます。 認証されているユーザーに依存するすべてのミドルウェアの前に を呼び出します。

認証の概念

認証には、アクセス許可の決定を行う認可用の を提供する役割があります。 正しいクレーム セットを生成する役割がある認証ハンドラーを選択するには、複数の認証スキームの手法があります。

  • 認証スキーム
  • 既定の認証スキーム。これについては、次のセクションで説明します。
  • を直接設定します。

スキームの自動プローブはありません。 既定のスキームが指定されていない場合は、Authorize 属性でスキームを指定する必要があります。そうしないと、次のエラーがスローされます。

InvalidOperationException: authenticationScheme が指定されておらず、DefaultAuthenticateScheme が見つかりませんでした。 既定のスキームは、AddAuthentication(string defaultScheme) または AddAuthentication(ActionAuthenticationOptions configureOptions) のいずれかを使用して設定できます。

認証スキーム

認証スキームでは、正しいクレーム セットを生成する役割がある認証ハンドラーを選択できます。 詳細については、特定のスキームでの承認に関するページを参照してください。

認証スキームは、次のものに対応する名前です。

  • 認証ハンドラー。
  • ハンドラーの特定のインスタンスを構成するためのオプション。

スキームは、関連付けられたハンドラーの認証、チャレンジ、禁止動作を参照するためのメカニズムとして役立ちます。 たとえば、認証ポリシーでは、スキーム名を使用して、ユーザーの認証に使用する認証スキーム (またはスキーム) を指定できます。 認証を構成する場合は、既定の認証スキームを指定するのが一般的です。 リソースが特定のスキームを要求しない限り、既定のスキームが使用されます。 また、次のことも可能です。

  • 認証、チャレンジ、禁止アクションに使用する別の既定のスキームを指定する。
  • ポリシー スキームを使用して、複数のスキームを 1 つに結合する。

認証ハンドラー

認証ハンドラーは:

  • スキームの動作を実装する型です。
  • または から派生しています。
  • ユーザーを認証するための主要な役割を担います。

認証スキームの構成と受信要求コンテキストに基づき、認証ハンドラーは:

  • 認証 成功した場合に、ユーザーの ID を表すオブジェクトを構築します。
  • 認証に失敗した場合は、'no result' または 'failure' を返します。
  • ユーザーがリソースをaccessしようとしたときのチャレンジアクションと禁止アクションのメソッドがあります。
    • 彼らはアクセスが禁止されています。
    • 認証されていない場合(チャレンジ)。

は、リモート認証手順を必要とする認証のクラスです。 リモート認証手順が完了すると、ハンドラーはハンドラーによって設定された にコールバックします。 ハンドラーは、 コールバック パスに渡される情報を使用して認証手順を完了します。 OAuth 2.0OIDC はどちらもこのパターンを使用します。 JWT とCookie は、ベアラー ヘッダーと を直接使用して認証できるため、そうではありません。 この場合、リモートでホストされるプロバイダーは、

  • 認証プロバイダーになります。
  • たとえば、Facebook、Twitter、Google、Microsoft、およびハンドラー メカニズムを使用してユーザーの認証を処理するその他の OIDC プロバイダーがあります。

認証

認証スキームの認証アクションは、要求コンテキストに基づいてユーザーの ID を構築する役割を担います。 認証が成功したかどうかを示す が返され、成功した場合は認証チケット内のユーザーの ID が返されます。 を参照してください。 認証の例を以下に示します。

  • Cookie からユーザーの ID を構築する 認証スキーム。
  • ユーザーの ID を構築するために JWT ベアラー トークンを逆シリアル化および検証する JWT ベアラー スキーム。

課題

認証チャレンジは、認証されていないユーザーが認証を必要とするエンドポイントを要求したときに、認可によって呼び出されます。 認証チャレンジが発行されるのは、匿名ユーザーが制限されたリソースを要求した場合や、ログイン リンクにアクセスした場合などです。 承認では、指定した認証スキームを使用してチャレンジが呼び出されます。指定されていない場合は既定値が呼び出されます。 を参照してください。 認証チャレンジの例を次に示します。

  • ログイン ページにユーザーをリダイレクトする 認証スキーム。
  • 401 の結果を返す JWT のベアラー・スキーム、 ヘッダー付き。

チャレンジ アクションでは、要求されたリソースをaccessするために使用する認証メカニズムをユーザーに知らせる必要があります。

禁止

認証スキームの禁止アクションは、認証されたユーザーがaccessが許可されていないリソースをaccessしようとしたときに、Authorization によって呼び出されます。 を参照してください。 認証の禁止の例を次に示します。

  • accessが禁止されたことを示すページにユーザーをリダイレクトする cookie 認証スキーム。
  • 403 結果を返す JWT ベアラースキーム。
  • ユーザーがリソースへのaccessを要求できるページにリダイレクトするカスタム認証スキーム。

禁止アクションを使用すると、ユーザーは次のことを知ることができます。

  • 認証されている。
  • 要求されたリソースにアクセスすることは許可されていません。

チャレンジと禁止の違いについては、次のリンクを参照してください。

  • 運用リソースハンドラーで操作や禁止を行う。
  • チャレンジと禁止の違い。

テナントごとの認証プロバイダー

ASP.NET Coreには、マルチテナント認証用の組み込みソリューションがありません。 組み込み機能を使用して作成することは可能ですが、マルチテナント認証には Orchard Core または ABP Framework を検討することをお勧めします。

Orchard Core とは:

  • ASP.NET Coreを使用して構築されたオープン ソース、モジュール式、マルチテナントのアプリ フレームワーク。
  • そのアプリ フレームワークの上に構築されたコンテンツ管理システム (CMS) です。

テナントごとの認証プロバイダーの例については、Orchard Core ソースを参照してください。

ABP Framework では、モジュール性、マイクロサービス、ドメイン駆動設計、マルチテナントなど、さまざまなアーキテクチャ パターンがサポートされています。 GitHub の ABP Framework ソースを参照してください。

その他のリソース

By Mike Rousos

認証は、ユーザーの ID を決定するプロセスです。 Authorization は、ユーザーがリソースにaccessしているかどうかを判断するプロセスです。 ASP.NET Coreでは、認証は認証サービス IAuthenticationService によって処理されます。これは認証middlewareで使用されます。 認証サービスは、登録済みの認証ハンドラーを使用して、認証関連のアクションを完了します。 認証関連のアクションの例を次に示します。

  • ユーザーを認証する。
  • 認証されていないユーザーが制限されたリソースをaccessしようとしたときに応答する。

登録済みの認証ハンドラーとその構成オプションは、"スキーム" と呼ばれます。

認証方式は に認証サービスを登録することによって指定されます。

  • の呼び出しの後にスキーム固有の拡張メソッド ( や など) を呼び出すことによって行います。 これらの拡張メソッドは を使用してスキームを適切な設定で登録します。
  • あまり一般的ではない方法として、 を直接呼び出すことがあります。

たとえば、次のコードでは、 と JWT ベアラー認証スキームの認証サービスとハンドラーが登録されます。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
        options => Configuration.Bind("JwtSettings", options))
    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
        options => Configuration.Bind("CookieSettings", options));

パラメーター は、特定のスキームが要求されていない場合に既定で使用されるスキームの名前です。

複数のスキームが使用される場合、認可ポリシー (または認可属性) で、ユーザーの認証時に使用する認証スキーム (複数可) を指定することができます。 上記の例では、 認証スキームを使用する場合に名前を指定しています (既定では ですが、 を呼び出すときに別の名前を指定することもできます)。

場合によっては、 の呼び出しが、他の拡張メソッドによって自動的に行われます。 たとえば、ASP.NET Core Identity を使用すると、AddAuthentication が内部で呼び出されます。

認証ミドルウェアは、 で を呼び出すことによって追加されます。 を呼び出すと、以前に登録された認証スキームを使用するミドルウェアが登録されます。 認証されているユーザーに依存するすべてのミドルウェアの前に を呼び出します。 エンドポイント ルーティングを使用する場合は、次のタイミングで の呼び出しを行う必要があります。

  • 認証の決定に使用できるように、ルート情報がの後で利用可能になります。
  • ユーザーがエンドポイントにアクセスする前に認証されるように、の前に。

認証の概念

認証には、アクセス許可の決定を行う認可用の を提供する役割があります。 正しいクレーム セットを生成する役割がある認証ハンドラーを選択するには、複数の認証スキームの手法があります。

  • 認証スキーム
  • 既定の認証スキーム。これについては、次のセクションで説明します。
  • を直接設定します。

スキームの自動プローブはありません。 既定のスキームが指定されていない場合は、Authorize 属性でスキームを指定する必要があります。そうしないと、次のエラーがスローされます。

InvalidOperationException: authenticationScheme が指定されておらず、DefaultAuthenticateScheme が見つかりませんでした。 既定のスキームは、AddAuthentication(string defaultScheme) または AddAuthentication(ActionAuthenticationOptions configureOptions) のいずれかを使用して設定できます。

認証スキーム

認証スキームでは、正しいクレーム セットを生成する役割がある認証ハンドラーを選択できます。 詳細については、特定のスキームでの承認に関するページを参照してください。

認証スキームは、次のものに対応する名前です。

  • 認証ハンドラー。
  • ハンドラーの特定のインスタンスを構成するためのオプション。

スキームは、関連付けられたハンドラーの認証、チャレンジ、禁止動作を参照するためのメカニズムとして役立ちます。 たとえば、認証ポリシーでは、スキーム名を使用して、ユーザーの認証に使用する認証スキーム (またはスキーム) を指定できます。 認証を構成する場合は、既定の認証スキームを指定するのが一般的です。 リソースが特定のスキームを要求しない限り、既定のスキームが使用されます。 また、次のことも可能です。

  • 認証、チャレンジ、禁止アクションに使用する別の既定のスキームを指定する。
  • ポリシー スキームを使用して、複数のスキームを 1 つに結合する。

認証ハンドラー

認証ハンドラーは:

  • スキームの動作を実装する型です。
  • または から派生しています。
  • ユーザーを認証するための主要な役割を担います。

認証スキームの構成と受信要求コンテキストに基づき、認証ハンドラーは:

  • 認証 成功した場合に、ユーザーの ID を表すオブジェクトを構築します。
  • 認証に失敗した場合は、'no result' または 'failure' を返します。
  • ユーザーがリソースをaccessしようとしたときのチャレンジアクションと禁止アクションのメソッドがあります。
    • 彼らはアクセスが禁止されています。
    • 認証されていない場合(チャレンジ)。

は、リモート認証手順を必要とする認証のクラスです。 リモート認証手順が完了すると、ハンドラーはハンドラーによって設定された にコールバックします。 ハンドラーは、 コールバック パスに渡される情報を使用して認証手順を完了します。 OAuth 2.0OIDC はどちらもこのパターンを使用します。 JWT とCookie は、ベアラー ヘッダーと を直接使用して認証できるため、そうではありません。 この場合、リモートでホストされるプロバイダーは、

  • 認証プロバイダーになります。
  • たとえば、Facebook、Twitter、Google、Microsoft、およびハンドラー メカニズムを使用してユーザーの認証を処理するその他の OIDC プロバイダーがあります。

認証

認証スキームの認証アクションは、要求コンテキストに基づいてユーザーの ID を構築する役割を担います。 認証が成功したかどうかを示す が返され、成功した場合は認証チケット内のユーザーの ID が返されます。 を参照してください。 認証の例を以下に示します。

  • Cookie からユーザーの ID を構築する 認証スキーム。
  • ユーザーの ID を構築するために JWT ベアラー トークンを逆シリアル化および検証する JWT ベアラー スキーム。

課題

認証チャレンジは、認証されていないユーザーが認証を必要とするエンドポイントを要求したときに、認可によって呼び出されます。 認証チャレンジが発行されるのは、匿名ユーザーが制限されたリソースを要求した場合や、ログイン リンクにアクセスした場合などです。 承認では、指定した認証スキームを使用してチャレンジが呼び出されます。指定されていない場合は既定値が呼び出されます。 を参照してください。 認証チャレンジの例を次に示します。

  • ログイン ページにユーザーをリダイレクトする 認証スキーム。
  • 401 の結果を返す JWT のベアラー・スキーム、 ヘッダー付き。

チャレンジ アクションでは、要求されたリソースをaccessするために使用する認証メカニズムをユーザーに知らせる必要があります。

禁止

認証スキームの禁止アクションは、認証されたユーザーがaccessが許可されていないリソースをaccessしようとしたときに、Authorization によって呼び出されます。 を参照してください。 認証の禁止の例を次に示します。

  • accessが禁止されたことを示すページにユーザーをリダイレクトする cookie 認証スキーム。
  • 403 結果を返す JWT ベアラースキーム。
  • ユーザーがリソースへのaccessを要求できるページにリダイレクトするカスタム認証スキーム。

禁止アクションを使用すると、ユーザーは次のことを知ることができます。

  • 認証されている。
  • 要求されたリソースにアクセスすることは許可されていません。

チャレンジと禁止の違いについては、次のリンクを参照してください。

  • 運用リソースハンドラーで操作や禁止を行う。
  • チャレンジと禁止の違い。

テナントごとの認証プロバイダー

ASP.NET Core フレームワークには、マルチテナント認証用の組み込みソリューションがありません。 お客様がマルチテナント認証を使用してアプリを作成することは可能ですが、マルチテナント認証をサポートする次の ASP.NET Coreアプリケーション フレームワークのいずれかを使用することをお勧めします。

Orchard Core は、コンテンツ管理システム (CMS) も提供する ASP.NET Coreを使用して構築されたオープンソースのモジュール型のマルチテナント アプリ フレームワークです。 テナントごとの認証プロバイダーの例については、Orchard Core ソースを参照してください。

ABP Framework では 、モジュール性、マイクロサービス、ドメイン駆動設計、マルチテナントなど、さまざまなアーキテクチャ パターンがサポートされています。 GitHub の ABP Framework ソースを参照してください。

その他のリソース