Auth0を使用すると、アプリケーションに認可を追加することができます。このガイドは、新規または既存のASP.NET Owin Web APIアプリケーションに
Microsoft.Owin.Security.Jwtパッケージを使ってAuth0を統合する方法を説明します。Auth0 DashboardでAPIをまだ作成していない場合は、対話型のセレクターを使ってAuth0 APIを新規作成します。そうでない場合は、プロジェクトに既存のAPIを選択することができます。Auth0 Dashboardを使って初めてAPIをセットアップする場合には、使用の開始ガイドを確認してください。それぞれのAuth0 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/auth0-fix-brokenpages/docs/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/auth0-fix-brokenpages/docs/images/ja-jp/cdy7uua7fh8z/1s3Yp5zqJiKiSWqbPSezNO/acef814282795bef6921535f044f96e9/Quickstarts_API.png)
2
依存関係をインストールする
Microsoft.Owin.Security.Jwt NuGetパッケージをインストールします。このパッケージには、Auth0のアクセストークンをASP.NET Owin Web APIで使用するために必要なOWIN JWTミドルウェアが含まれています。3
ミドルウェアを構成する
StartupクラスのConfigurationメソッドに移動し、構成したJwtBearerAuthenticationOptionsを渡してUseJwtBearerAuthenticationの呼び出しを追加します。JwtBearerAuthenticationOptionsでは、Auth0 API識別子をValidAudienceプロパティで指定し、Auth0ドメインへのフルパスをValidIssuerとして指定する必要があります。OpenIdConnectSigningKeyResolverのインスタンスを使用するようにIssuerSigningKeyResolverを構成して、署名鍵を解決できるようにします。末尾のスラッシュを忘れてはいけません。
ValidIssuerに指定したURLの末尾にフォワードスラッシュ(/)があることを必ず確認してください。これは、JWTの発行者クレームと一致しなければなりません。この値の構成を誤ると、APIの呼び出しが正しく認証されません。4
トークンの署名を検証する
OWINのJWTミドルウェアはOpen ID Connect Discoveryをデフォルトでは使用しないため、カスタムの
IssuerSigningKeyResolverを提供する必要があります。OpenIdConnectSigningKeyResolverクラスを作成し、GetSigningKeyを実装して、正しいSecurityKeyが返されることを確認します。このクラスは、Startup.csでミドルウェアを構成する際に、TokenValidationParameters.IssuerSigningKeyResolverとして使用されます。5
スコープを検証する
JWTミドルウェアは、要求に含まれたアクセストークンが有効であることを検証しますが、現時点では、トークンが要求されたリソースへのアクセスに十分なscope を持っているのかを確認する手段はありません。
System.Web.Http.AuthorizeAttributeを継承するScopeAuthorizeAttributeという名前のクラスを作成してください。この属性はAuth0テナントが発行したscopeクレームが存在することを確認し、存在する場合には、scopeクレームが要求されたスコープを含んでいることを確認します。6
APIエンドポイントを保護する
以下に示されたルートは次の要求で使用することができます:
GET /api/public:認証を必要としない要求に使用することができます。GET /api/private:追加スコープのないアクセストークンを含む認証された要求に使用することができます。GET /api/private-scoped:read:messagesスコープが付与されたアクセストークンを含む認証された要求に使用することができます。
[Authorize]属性で装飾するだけで、エンドポイントのセキュリティを確保できます。アクションをScopeAuthorize属性で更新し、必要なscopeの名前をscopeパラメーターに渡します。これにより、特定のAPIエンドポイントを呼び出すために、正しいスコープが利用できることが確実になります。チェックポイント
アプリケーションの構成が完了したら、アプリケーションを実行して次の点を検証します: GET /api/public が認証を必要としない要求に使用できる。 GET /api/private が認証された要求に使用できる。 GET /api/private-scoped がread:messagesスコープが付与されたアクセストークンを含む認証された要求に使用できる。次のステップ
成功です!ここまで来れば、アプリケーションにログイン、ログアウト、ユーザープロファイル情報が備わっているはずです。これでクイックスタートチュートリアルは終了ですが、機能はまだまだたくさんあります。Auth0でできることについて詳しくは、以下をご覧ください。- Auth0 Dashboard - Auth0のテナントやアプリケーションを構成して管理する方法について説明します
- Auth0 Marketplace - Auth0の機能性を拡張できる各種の統合を見つけられます