ASP.NET OWIN Web APIアプリケーションに認可を追加する

Auth0を使用すると、アプリケーションに認可を追加することができます。このガイドは、新規または既存のASP.NET Owin Web APIアプリケーションにMicrosoft.Owin.Security.Jwtパッケージを使ってAuth0を統合する方法を説明します。

Auth0 DashboardでAPIをまだ作成していない場合は、対話型のセレクターを使ってAuth0 APIを新規作成します。そうでない場合は、プロジェクトに既存のAPIを選択することができます。

Auth0 Dashboardを使って初めてAPIをセットアップする場合には、使用の開始ガイドを確認してください。

それぞれのAuth0 APIにはAPI識別子があり、アプリケーションにアクセストークンの検証で使用されます。

1

アクセス許可を定義する

アクセス許可は、ユーザーの代わりに、提供されたアクセストークンを使ってどのようにしてリソースにアクセスできるのかを定義できるようにします。たとえば、ユーザーがマネージャーアクセスレベルを持つ場合には、messagesリソースに対して読み取りアクセスを付与し、管理者アクセスレベルを持つ場合には、書き込みアクセスを付与することができます。

Auth0 Dashboardの[API]セクションにある[Permissions(権限)]ビューで使用可能なアクセス許可を定義することができます。以下の例ではread:messagesスコープを使用します。

[Auth0 Dashboard]>[Applications(アプリケーション)]>[APIs]>[Specific API(特定のAPI]>[Permissions(権限)]タブ

2

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

Microsoft.Owin.Security.Jwt NuGetパッケージをインストールします。このパッケージには、Auth0のアクセストークンをASP.NET Owin Web APIで使用するために必要なOWIN JWTミドルウェアが含まれています。

Install-Package Microsoft.Owin.Security.Jwt

Was this helpful?

/

3

ミドルウェアを構成する

StartupクラスのConfigurationメソッドに移動し、構成したJwtBearerAuthenticationOptionsを渡してUseJwtBearerAuthenticationの呼び出しを追加します。

JwtBearerAuthenticationOptionsでは、Auth0 API識別子をValidAudienceプロパティで指定し、Auth0ドメインへのフルパスをValidIssuerとして指定する必要があります。OpenIdConnectSigningKeyResolverのインスタンスを使用するようにIssuerSigningKeyResolverを構成して、署名鍵を解決できるようにします。

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-scopedread:messagesスコープが付与されたアクセストークンを含む認証された要求に使用することができます。

JWTミドルウェアは標準のASP.NETの認証および認可メカニズムと統合できるため、コントローラーのアクションを[Authorize]属性で装飾するだけで、エンドポイントのセキュリティを確保できます。

アクションをScopeAuthorize属性で更新し、必要なscopeの名前をscopeパラメーターに渡します。これにより、特定のAPIエンドポイントを呼び出すために、正しいスコープが利用できることが確実になります。

checkpoint.header

アプリケーションの構成が完了したら、アプリケーションを実行して次の点を検証します:

  • GET /api/public が認証を必要としない要求に使用できる。

  • GET /api/private が認証された要求に使用できる。

  • GET /api/private-scoped read:messagesスコープが付与されたアクセストークンを含む認証された要求に使用できる。

Next Steps

Excellent work! If you made it this far, you should now have login, logout, and user profile information running in your application.

This concludes our quickstart tutorial, but there is so much more to explore. To learn more about what you can do with Auth0, check out:

  • Auth0 Dashboard - Learn how to configure and manage your Auth0 tenant and applications
  • Auth0 Marketplace - Discover integrations you can enable to extend Auth0’s functionality

Did it work?

Any suggestion or typo?

Edit on GitHub
Sign Up

Sign up for an or to your existing account to integrate directly with your own tenant.