Skip to main content
David Patrick による執筆
このチュートリアルでは、Express.js API に認可を追加する方法を説明します。ご利用のアカウント向けに構成されたサンプルを使ってこのクイックスタートを進められるよう、ログインすることをお勧めします。
Auth0 を初めて利用しますか? Auth0 の仕組み について学び、OAuth 2.0 フレームワークを使用した API 認証と認可の実装方法 を確認してください。

Auth0 API を設定する

API を作成する

Auth0 Dashboard の APIs セクションで Create API をクリックします。API の 名前 と 識別子 を指定します(例: https://quickstarts/api)。後でアクセストークン検証を設定する際に、この識別子を audience として使用します。Signing AlgorithmRS256 のままにしておきます。
Create API
デフォルトでは、この API はトークンの署名アルゴリズムとして RS256 を使用します。RS256 は秘密鍵/公開鍵ペアを使用するため、トークンは Auth0 アカウントの公開鍵に対して検証されます。公開鍵は JSON Web Key Set (JWKS) 形式で提供されており、こちら からアクセスできます。
API にはデフォルトの RS256 署名アルゴリズム を使用することを推奨します。HS256 アルゴリズムを使用する必要がある場合は、HS256 integration sample を参照してください。

パーミッションを定義する

パーミッションを使用すると、特定のアクセストークンを使用してユーザーに代わってリソースへどのようにアクセスさせるかを定義できます。たとえば、ユーザーにマネージャーのアクセスレベルがある場合は messages リソースへの読み取りアクセスを許可し、管理者のアクセスレベルがある場合はそのリソースへの書き込みアクセスを許可するといった構成が考えられます。 許可されるパーミッションは、Auth0 Dashboard の APIs セクションにある Permissions ビューで定義できます。
Configure Permissions
この例では read:messages スコープを使用します。
この例では、次の内容を示します。
  • 受信した HTTP リクエストの Authorization ヘッダー内に JSON Web Token (JWT) が含まれているかを確認する方法。
  • Auth0 アカウントの JSON Web Key Set (JWKS) を使用して、そのトークンが有効かどうかを確認する方法。アクセストークンの検証について詳しくは、アクセストークンを検証するを参照してください。

アクセストークンの検証

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

このガイドでは、express-oauth2-jwt-bearer ミドルウェアを使用して Express API を保護する方法を説明します。 まず、npm を使ってソフトウェア開発キット (SDK) をインストールします。
npm install --save express-oauth2-jwt-bearer

ミドルウェアを設定する

express-oauth2-jwt-bearer を、ドメインと API 識別子を指定して設定します。 上記の checkJwt ミドルウェアは、リクエストに含まれるユーザーのアクセストークンが有効かどうかをチェックします。トークンが有効でない場合、ユーザーがエンドポイントにアクセスしようとすると 401 Authorization エラーが返されます。このミドルウェアは、要求されたリソースにアクセスするために十分なスコープがトークンに含まれているかどうかまではチェックしません。

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

次のルートは、以下のリクエストで利用できます。
  • GET /api/public: 認証不要なリクエストで利用可能
  • GET /api/private: 追加のスコープを含まないアクセストークンを持つ認証済みリクエストで利用可能
  • GET /api/private-scoped: read:messages スコープが付与されたアクセストークンを持つ認証済みリクエストで利用可能
有効な JWT が必要な個々のルートを保護するには、そのルートを checkJwt express-oauth2-jwt-bearer ミドルウェアで設定します。
// server.js

// このルートは認証不要
app.get('/api/public', function(req, res) {
  res.json({
    message: 'Hello from a public endpoint! You don\'t need to be authenticated to see this.'
  });
});

// このルートは認証が必要
app.get('/api/private', checkJwt, function(req, res) {
  res.json({
    message: 'Hello from a private endpoint! You need to be authenticated to see this.'
  });
});
個々のルートごとに、特定のスコープを要求するよう設定できます。これを行うには、requiresScope メソッドを使用する別のミドルウェアを用意します。必要なスコープを指定し、認可を追加したい任意のルートにそのミドルウェアを適用します。 保護したいルートには、checkJwtrequiredScopes のミドルウェアを渡します。
// server.js
const { requiredScopes } = require('express-oauth2-jwt-bearer');

const checkScopes = requiredScopes('read:messages');

app.get('/api/private-scoped', checkJwt, checkScopes, function(req, res) {
  res.json({
    message: 'Hello from a private endpoint! You need to be authenticated and have a scope of read:messages to see this.'
  });
});
この構成では、read:messages スコープを持つアクセストークンだけがエンドポイントにアクセスできます。