Auth0を使用すると、アプリケーションに認証を追加して、アプリケーションの種類にかかわらず、ユーザープロファイル情報に手軽にアクセスすることができます。このガイドは、新規または既存のASP.NET Web APIアプリケーションに
Microsoft.AspNetCore.Authentication.JwtBearer
パッケージを使ってAuth0を統合する方法を説明します。Auth0 DashboardでAPIをまだ作成していない場合は、対話型のセレクターを使ってAuth0 APIを新規作成します。そうでない場合は、統合したいプロジェクトを表す既存のAPIを選択することができます。または、Auth0 Dashboardを使って初めてAPIをセットアップする方法を使用の開始ガイドで確認することもできます。Auth0にあるAPIはそれぞれAPI識別子を使って構成され、アプリケーションのコードはAPI識別子をオーディエンスとしてアクセストークンを検証します。Auth0を初めてご利用ですか? Auth0の仕組みと、OAuth 2.0フレームワークを用いたAPI認証と認可の実装について説明します。
1
アクセス許可を定義する
アクセス許可は、ユーザーの代わりに、提供されたアクセストークンを使ってどのようにしてリソースにアクセスできるのかを定義できるようにします。たとえば、ユーザーがマネージャーアクセスレベルを持つ場合には、![[Auth0 Dashboard]>[Applications(アプリケーション)]>[APIs]>[Specific API(特定のAPI]>[Permissions(権限)]タブ](https://mintlify.s3.us-west-1.amazonaws.com/docs-dev/images/ja-jp/cdy7uua7fh8z/1s3Yp5zqJiKiSWqbPSezNO/acef814282795bef6921535f044f96e9/Quickstarts_API.png)
messages
リソースに対して読み取りアクセスを付与し、管理者アクセスレベルを持つ場合には、書き込みアクセスを付与することができます。Auth0 Dashboardの[API]セクションにある**[Permissions(権限)]** ビューで使用可能なアクセス許可を定義することができます。以下の例ではread:messages
スコープを使用します。![[Auth0 Dashboard]>[Applications(アプリケーション)]>[APIs]>[Specific API(特定のAPI]>[Permissions(権限)]タブ](https://mintlify.s3.us-west-1.amazonaws.com/docs-dev/images/ja-jp/cdy7uua7fh8z/1s3Yp5zqJiKiSWqbPSezNO/acef814282795bef6921535f044f96e9/Quickstarts_API.png)
2
依存関係をインストールする
アプリケーションがアクセストークンを検証できるようにするには、
Microsoft.AspNetCore.Authentication.JwtBearer
NuGetパッケージへの参照を追加します。3
ミドルウェアを構成する
アプリケーションの
Program.cs
ファイルを構成して、認証ミドルウェアをセットアップします:-
AddAuthentication
メソッドを呼び出して、認証サービスを登録します。JwtBearerDefaults.AuthenticationScheme
をデフォルトのスキームとして構成します。 -
AddJwtBearer
メソッドを呼び出して、JWTベアラー認証スキームを登録します。Auth0ドメインをオーソリティ、Auth0 API識別子をオーディエンスとして構成し、Auth0ドメインとAPI識別子がアプリケーションのappsettings.json ファイル内で設定されていることを確認します。 OPEN|INFO 場合によっては、アクセストークンにsub
クレームが含まれないことがあります。この場合には、User.Identity.Name
がnull
になります。別のクレームをUser.Identity.Name
にマッピングしたい場合には、それをAddJwtBearer()
への呼び出しの中でoptions.TokenValidationParameters
に追加します。 CLOSE|INFO -
UseAuthentication
メソッドとUseAuthorization
メソッドの呼び出しをvar app = builder.Build();
メソッドの下に追加して、ミドルウェアパイプラインに認証ミドルウェアと認可ミドルウェアを追加します。
4
スコープを検証する
アクセストークンに正しいスコープが含まれていることを確認するには、ASP.NET Coreのポリシーベースの認可を使用します。
HasScopeRequirement
という名前の新しい認可要求を作成します。これは、Auth0テナント発行のscope
クレームが存在するかを確認し、存在する場合には、要求されたスコープがそのクレームに含まれているかを確認します。Program.cs
ファイルにあるvar builder = WebApplication.CreateBuilder(args);
メソッドの下に、app.AddAuthorization
メソッドへの呼び出しを追加します。- スコープのポリシーを追加するには、各スコープに
AddPolicy
を呼び出します。 HasScopeHandler
クラスのシングルトンを登録します。
6
APIを呼び出す
APIの呼び出し方は、開発しているアプリケーションの種類と使用しているフレームワークに依存します。詳細については、該当するアプリケーションのクイックスタートをお読みください。要求例
アクセストークン取得する
開発しているアプリケーションの種類や使用しているフレームワークが何であったとしても、APIを呼び出すにはアクセストークンが必要です。シングルページアプリケーション(SPA)またはネイティブアプリケーションからAPIを呼び出すと、認可フローの完了後にアクセストークンを受け取ります。コマンドラインツールや他のサービスなど、ユーザーが資格情報を入力しないものからAPIを呼び出す際には、OAuthクライアントの資格情報フローを使用します。そのためには、マシンツーマシンアプリケーションを登録し、要求内で以下の値を渡します。- クライアントID を
client_id
パラメーターとして渡す。 - クライアントシークレット を
client_secret
パラメーターとして渡す。 - API 識別子 (このクイックスタートで以前にミドルウェアの構成に使用したのと同じ値)を
audience
パラメーターとして渡す。
マシンツーマシンアプリケーションにクライアントIDとクライアントシークレットを取得する詳細については、アプリケーションの設定をお読みください。
セキュリティ保護されたエンドポイントを呼び出す
取得したアクセストークン使用すると、セキュリティ保護されたAPIエンドポイントを呼び出すことができます。セキュリティ保護されたエンドポイントを呼び出す際には、アクセストークンをベアラートークンとして要求の認可 ヘッダーに含める必要があります。たとえば、/api/private
エンドポイントに要求を送信することができます:/api/private-scoped
エンドポイントも同様の方法で呼び出しますが、APIのアクセス許可が正しく構成され、アクセストークンにread:messages
スコープがあることを確認してください。チェックポイント
/api/privateと/api/private-scopedエンドポイントを呼び出すことができるはずです。 アプリケーションを実行して次の点を確認します: GET /api/privateが認証された要求に使用できる。 GET /api/private-scopedがread:messagesスコープが付与されたアクセストークンを含む認証された要求に使用できる。次のステップ
成功です!ここまで来れば、アプリケーションにログイン、ログアウト、ユーザープロファイル情報が備わっているはずです。これでクイックスタートチュートリアルは終了ですが、機能はまだまだたくさんあります。Auth0でできることについて詳しくは、以下をご覧ください。- Auth0 Dashboard - Auth0のテナントやアプリケーションを構成して管理する方法について説明します
- Auth0 Marketplace - Auth0の機能性を拡張できる各種の統合を見つけられます