Skip to main content
Auth0は初めてですか? Auth0の仕組みを学び、OAuth 2.0フレームワークを使用した API の認証および認可の実装方法 についてご確認ください。

はじめに

Auth0 を使用すると、あらゆる種類のアプリケーションに認可を追加できます。このガイドでは、Microsoft.Owin.Security.Jwt パッケージを使用して、新規または既存の ASP.NET OWIN Web API アプリケーションに Auth0 を統合する方法を説明します。各 Auth0 API では API 識別子が使用され、アプリケーションがアクセストークンを検証するにはこれが必要です。 この例では、次の内容を説明します。
  • 受信した HTTP リクエストの Authorization ヘッダーに JSON Web トークン (JWT) が含まれているかどうかを確認する方法。
  • Auth0 アカウントの JSON Web Key Set (JWKS) を使用して、トークンが有効かどうかを確認する方法。アクセストークンの検証について詳しくは、アクセストークンを検証する を参照してください。
1

API を作成

Auth0 Dashboard の APIs セクションで、Create API をクリックします。API の名前と識別子を入力します。たとえば https://quickstarts/api です。この識別子は、後でアクセストークンの検証を設定する際に audience として使用します。Signing AlgorithmRS256 のままにします。
API を作成
デフォルトでは、API はトークンの署名アルゴリズムとして RS256 を使用します。RS256 は秘密鍵と公開鍵のペアを使用するため、Auth0 アカウントの公開鍵を使ってトークンを検証します。公開鍵は JSON Web Key Set (JWKS) 形式で提供されており、こちら から取得できます。
2

権限を定義する

権限を使うと、指定されたアクセストークンを持つユーザーに代わって、リソースへのアクセス方法を定義できます。たとえば、ユーザーが manager のアクセスレベルを持っている場合は messages リソースへの読み取りアクセスを許可し、administrator のアクセスレベルを持っている場合はそのリソースへの書き込みアクセスを許可するといった設定が可能です。許可する権限は、Auth0 Dashboard の APIs セクションにある Permissions view で定義できます。
権限の設定
この例では、read:messages scope を使用します。
3

サンプルプロジェクトを設定する

サンプルコードの Web.config には appsettings セクションがあり、API 用の正しい Auth0 DomainAPI 識別子 を使うよう設定されています。このページからコードをダウンロードした場合は、自動的に入力されています。Github の例を使う場合は、自分で入力する必要があります。
web.config
4

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

ASP.NET で Auth0 アクセストークンを使用するには、Microsoft.Owin.Security.Jwt NuGet パッケージで提供されている OWIN JWT ミドルウェアを使用します。
5

トークン署名を検証する

OWIN JWT ミドルウェアはデフォルトで Open ID Connect Discovery を使用しないため、カスタムの IssuerSigningKeyResolver を指定する必要があります。これを行うには、Support/OpenIdConnectSigningKeyResolver.cs ファイルに次の内容を追加します。
このようなカスタム リゾルバーは、以前は NuGet 経由で Auth0.OpenIdConnectSigningKeyResolver パッケージの一部として公開されていました。このパッケージは現在利用できないため、ご自身で用意する必要があります。
OpenIdConnectSigningKeyResolver.cs
OpenIdConnectSigningKeyResolver は、OpenID Connect Configuration エンドポイント (/.well-known/openid-configuration) から、RS256 トークンの署名に使用される JSON Web Key Set を自動的にダウンロードします。続いて、以下の JWT 登録コードで示すように、これを使って発行者の署名鍵を解決できます。
6

JWT認証を設定する

Startup クラスの Configuration メソッドを開き、設定済みの JwtBearerAuthenticationOptions を渡す UseJwtBearerAuthentication の呼び出しを追加します。JwtBearerAuthenticationOptions では、ValidAudience プロパティに Auth0 API 識別子を、ValidIssuer には Auth0 ドメインの完全なパスを指定する必要があります。また、IssuerSigningKeyResolver は、OpenIdConnectSigningKeyResolver のインスタンスを使用して署名鍵を解決できるように構成する必要があります:
Startup.cs

末尾のバックスラッシュを忘れないでください

ValidIssuer に指定する URL には、末尾のバックスラッシュが含まれていることを必ず確認してください。JWT の発行者 claim と完全に一致している必要があるためです。これはよくある設定ミスで、API 呼び出しが正しく認証されない原因になります。
7

スコープを検証する

上記の JWT ミドルウェアは、リクエストに含まれるアクセストークンが有効であることを検証しますが、要求されたリソースにアクセスするために必要な スコープ をトークンが十分に持っているかどうかを確認する仕組みは、まだ備わっていません。System.Web.Http.AuthorizeAttribute を継承する ScopeAuthorizeAttribute というクラスを作成します。この認可属性は、Auth0 テナント によって発行された scope クレームが存在することを確認し、存在する場合は、その scope クレームに要求されたスコープが含まれていることを検証します。
ScopeAuthorizeAttribute.cs
8

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

以下に示すルートは、次のリクエストで利用できます。
  • GET /api/public: 非認証のリクエストで利用可能
  • GET /api/private: 追加のスコープを持たないアクセストークンを含む、認証済みリクエストで利用可能
  • GET /api/private-scoped: read:messages スコープが付与されたアクセストークンを含む、認証済みリクエストで利用可能
JWT ミドルウェアは、標準的な ASP.NET の認証および認可の仕組みと統合されているため、エンドポイントを保護するには、コントローラーのアクションに [Authorize] 属性を付与するだけで済みます。特定の API エンドポイントを呼び出すために必要なスコープが含まれていることを確認するには、アクションに ScopeAuthorize 属性を付与し、scope パラメータに必要な scope の名前を渡してください。
ApiController.cs
Checkpointアプリケーションの設定が完了したら、アプリケーションを実行し、次のことを確認してください。
  • GET /api/public は、認証されていないリクエストで利用できます。
  • GET /api/private は、認証されたリクエストで利用できます。
  • GET /api/private-scoped は、read:messages scope を持つ アクセストークン を含む認証済みリクエストで利用できます。

追加リソース

サンプルアプリケーション

このQuickstartの完全なサンプルアプリケーション

IDプロバイダー

他のアイデンティティプロバイダーを設定する

多要素認証

多要素認証を有効にする

攻撃対策

攻撃対策について学ぶ

ルール

カスタムロジックでAuth0を拡張する

コミュニティフォーラム

Auth0 Communityでサポートを受ける