メインコンテンツへスキップ
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

アクセス許可を定義する

アクセス許可は、ユーザーの代わりに、提供されたアクセストークンを使ってどのようにしてリソースにアクセスできるのかを定義できるようにします。たとえば、ユーザーがマネージャーアクセスレベルを持つ場合には、messagesリソースに対して読み取りアクセスを付与し、管理者アクセスレベルを持つ場合には、書き込みアクセスを付与することができます。Auth0 Dashboardの[API]セクションにある**[Permissions(権限)]** ビューで使用可能なアクセス許可を定義することができます。以下の例ではread:messagesスコープを使用します。
[Auth0 Dashboard]>[Applications(アプリケーション)]>[APIs]>[Specific API(特定のAPI]>[Permissions(権限)]タブ
2

依存関係をインストールする

アプリケーションがアクセストークンを検証できるようにするには、Microsoft.AspNetCore.Authentication.JwtBearer NuGetパッケージへの参照を追加します。
Install-Package Microsoft.AspNetCore.Authentication.JwtBearer
3

ミドルウェアを構成する

アプリケーションのProgram.csファイルを構成して、認証ミドルウェアをセットアップします:
  1. AddAuthenticationメソッドを呼び出して、認証サービスを登録します。JwtBearerDefaults.AuthenticationSchemeをデフォルトのスキームとして構成します。
  2. AddJwtBearerメソッドを呼び出して、JWTベアラー認証スキームを登録します。Auth0ドメインをオーソリティ、Auth0 API識別子をオーディエンスとして構成し、Auth0ドメインとAPI識別子がアプリケーションのappsettings.json ファイル内で設定されていることを確認します。 OPEN|INFO 場合によっては、アクセストークンにsubクレームが含まれないことがあります。この場合には、User.Identity.Namenullになります。別のクレームをUser.Identity.Nameにマッピングしたい場合には、それをAddJwtBearer()への呼び出しの中でoptions.TokenValidationParametersに追加します。 CLOSE|INFO
  3. UseAuthenticationメソッドとUseAuthorizationメソッドの呼び出しをvar app = builder.Build();メソッドの下に追加して、ミドルウェアパイプラインに認証ミドルウェアと認可ミドルウェアを追加します。
4

スコープを検証する

アクセストークンに正しいスコープが含まれていることを確認するには、ASP.NET Coreのポリシーベースの認可を使用します。
  1. HasScopeRequirementという名前の新しい認可要求を作成します。これは、Auth0テナント発行のscopeクレームが存在するかを確認し、存在する場合には、要求されたスコープがそのクレームに含まれているかを確認します。
  2. Program.csファイルにあるvar builder = WebApplication.CreateBuilder(args);メソッドの下に、app.AddAuthorizationメソッドへの呼び出しを追加します。
  3. スコープのポリシーを追加するには、各スコープにAddPolicyを呼び出します。
  4. HasScopeHandlerクラスのシングルトンを登録します。
5

APIエンドポイントを保護する

JWTミドルウェアは、ASP.NET Coreの標準の認証および認可メカニズムと統合します。エンドポイントのセキュリティを保護するには、[Authorize]属性をコントローラーのアクション(すべてのアクションのセキュリティを保護するには、コントローラー)に追加します。特定のスコープが必要なエンドポイントのセキュリティを保護するには、正しいスコープがaccess_tokenに存在することを確認します。そのためには、Authorize属性をScopedアクションに追加し、read:messagespolicyパラメーターとして渡します。
6

APIを呼び出す

APIの呼び出し方は、開発しているアプリケーションの種類と使用しているフレームワークに依存します。詳細については、該当するアプリケーションのクイックスタートをお読みください。

アクセストークン取得する

開発しているアプリケーションの種類や使用しているフレームワークが何であったとしても、APIを呼び出すにはアクセストークンが必要です。シングルページアプリケーション(SPA)またはネイティブアプリケーションからAPIを呼び出すと、認可フローの完了後にアクセストークンを受け取ります。コマンドラインツールや他のサービスなど、ユーザーが資格情報を入力しないものからAPIを呼び出す際には、OAuthクライアントの資格情報フローを使用します。そのためには、マシンツーマシンアプリケーションを登録し、要求内で以下の値を渡します。
  • クライアントIDclient_idパラメーターとして渡す。
  • クライアントシークレットclient_secretパラメーターとして渡す。
  • API 識別子 (このクイックスタートで以前にミドルウェアの構成に使用したのと同じ値)をaudienceパラメーターとして渡す。
マシンツーマシンアプリケーションにクライアントIDとクライアントシークレットを取得する詳細については、アプリケーションの設定をお読みください。
要求例
curl --request post \
--url 'https://dev-gja8kxz4ndtex3rq.us.auth0.com/oauth/token' \
--header 'content-type: application/x-www-form-urlencoded'

セキュリティ保護されたエンドポイントを呼び出す

取得したアクセストークン使用すると、セキュリティ保護されたAPIエンドポイントを呼び出すことができます。セキュリティ保護されたエンドポイントを呼び出す際には、アクセストークンをベアラートークンとして要求の認可 ヘッダーに含める必要があります。たとえば、/api/privateエンドポイントに要求を送信することができます:
curl --request get \
--url http://localhost:3010/api/private \
--header 'authorization: Bearer YOUR_ACCESS_TOKEN'
/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の機能性を拡張できる各種の統合を見つけられます
I