メインコンテンツへスキップ
このセクションでは、Auth0 Dashboard で必要な設定を一通り確認します。

API を作成する

左側の APIs メニュー をクリックし、Create API ボタンをクリックします。 API には次の情報を指定する必要があります。
  • 名前: API のわかりやすい名前です。機能には影響しません。
  • 識別子: API の一意の識別子です。URL を使用することをお勧めしますが、公開 URL である必要はありません。Auth0 が API を呼び出すことはありません。この値は後から変更できません。
  • : トークンの署名に使用するアルゴリズムです。指定できる値は HS256RS256 です。RS256 を選択すると、トークンはテナントの秘密鍵で署名されます。署名アルゴリズムの詳細については、Signing Algorithms を参照してください。
Dashboard - Applications - APIs - Create API - Popup
必要な情報を入力し、Create ボタンをクリックします。

署名アルゴリズム

API を作成するときは、トークンの署名に使用するアルゴリズムを選択する必要があります。署名は、 の送信者が名乗っている本人であることを検証し、メッセージが途中で改ざんされていないことを保証するために使用されます。
署名は JWT の一部です。JWT の構造に不慣れな場合は、JSON Web Token Structure を参照してください。
署名部分を作成するには、エンコードされたヘッダー、エンコードされたペイロード、シークレット、ヘッダーで指定されたアルゴリズムを用意して署名する必要があります。そのアルゴリズムは JWT ヘッダーの一部であり、API に対して選択するのは HS256 または RS256 です。
  • RS256非対称アルゴリズムです。つまり、公開鍵と秘密鍵 (シークレット) の 2 つの鍵があります。Auth0 は署名の生成に使用する秘密鍵を保持し、JWT の利用者は署名の検証に使用する公開鍵を保持します。
  • HS256対称アルゴリズムです。つまり、2 者間で共有する 1 つの秘密鍵しかありません。同じ鍵が署名の生成と検証の両方に使用されます。鍵の機密性を維持するため、特別な注意が必要です。
最も安全で、Auth0 が推奨する方法は RS256 を使用することです。理由の一部を以下に示します。
  • RS256 では、秘密鍵の保有者 (Auth0) のみがトークンに署名でき、公開鍵を使えば誰でもトークンが有効かどうかを確認できます。
  • HS256 では、秘密鍵が侵害された場合、新しいシークレットで API を再デプロイする必要があります。RS256 では、複数のオーディエンスに対して有効なトークンをリクエストできます。
  • RS256 では、新しいシークレットで API を再デプロイしなくても、鍵のローテーションを実装できます。
JWT 署名アルゴリズムの詳細については、JSON Web Token (JWT) Signing Algorithms Overview を参照してください。

Permissions を設定する

アプリケーションを作成したら、認可時にアプリケーションが要求できる Permissions を設定する必要があります。 API の設定画面で、Permissions タブを開きます。このセクションでは、前述した 4 つのスコープ、すなわち read:timesheetscreate:timesheetsdelete:timesheetsapprove:timesheets をすべて追加できます。
Dashboard - Applications - APIs - Permissions

アプリケーションを作成する

Auth0 には 4 種類のアプリケーションがあります。Native App (モバイルアプリまたはデスクトップアプリで使用) 、Single-Page Web AppRegular Web AppMachine to Machine App (CLI、デーモン、またはバックエンドで実行されるサービスで使用) です。今回はモバイルアプリケーション用の新しいアプリケーションを作成するため、アプリケーションタイプには Native を使用します。 新しいアプリケーションを作成するには、dashboard に移動し、左側の Applications メニューをクリックします。次に、+ Create Application ボタンをクリックします。 アプリケーションの名前を設定し (ここでは Timesheets Mobile を使用します) 、タイプとして Native App を選択します。 Create をクリックします。

Authorization Extension を設定する

テナントに Authorization Extension がインストールされていることを確認してください。手順の詳細については、Authorization Extension のドキュメントを参照してください。

Permissions を定義する

すでに定義したスコープに対応する Permissions を定義する必要があります。Authorization Extension で Permissions タブをクリックし、Create Permission ボタンをクリックします。ダイアログで、各権限の詳細を入力します。権限の名前が対応するスコープと完全に一致していることを確認してください。 残りのスコープについても、同様に権限を作成します。

ロールを定義する

Roles タブに移動し、2 つのロールを作成します。Create Role ボタンをクリックし、Timesheets SPA アプリケーションを選択します。ロールの名前と説明に Employee を指定し、delete:timesheetscreate:timesheetsread:timesheets の権限を選択します。Save をクリックします。 次に、同じ手順で Manager ロールを作成し、すべての権限が選択されていることを確認します。
ダッシュボード - Extensions - Authorization Extension - Manager ロールの作成

ユーザーをロールに割り当てる

すべてのユーザーを、Manager ロールまたは User ロールのいずれかに割り当てる必要があります。これを行うには、Authorization Extension の Users タブに移動してユーザーを選択します。ユーザー情報画面で Roles タブを開きます。Add Role to User ボタンをクリックして、そのユーザーに適切なロールを選択すると、ロールを追加できます。

Authorization Extension の設定

Authorization Extension の Rule が公開されていることも確認する必要があります。Authorization Extension の右上にあるユーザーアバターをクリックし、Configuration オプションを選択します。 Permissions が有効になっていることを確認し、Publish Rule ボタンをクリックします。

トークンのスコープを検証する Rule を作成する

このプロセスの最後の手順では、ユーザーに割り当てられた権限に基づいて、 に含まれるスコープが有効かどうかを検証する Rule を作成します。ユーザーに対して無効なスコープは、アクセストークンから削除する必要があります。 で Rules タブに移動します。Authorization Extension によって作成された Rule が表示されます。 Create Rule ボタンをクリックし、Empty Rule テンプレートを選択します。Rule には、たとえば Access Token Scopes のような名前を付けてから、その Rule に次のコードを指定します。
function (user, context, callback) {
  if (context.clientName !== 'Timesheets SPA') {
    return callback(null, user, context);
  }

  var permissions = user.permissions || [];
  var requestedScopes = context.request.body.scope || context.request.query.scope;
  var filteredScopes = requestedScopes.split(' ').filter( function(x) {
    return x.indexOf(':') < 0;
  });
  Array.prototype.push.apply(filteredScopes, permissions);
  context.accessToken.scope = filteredScopes.join(' ');

  callback(null, user, context);
}
上記のコードにより、すべてのアクセストークンには、ユーザーの権限に基づいて有効な、正しい形式のスコープ (例: action:areadelete:timesheets) のみが含まれるようになります。完了したら、Save ボタンをクリックします。 Rules は Rules ページに表示されている順序で実行されるため、新しく作成した Rule が Authorization Extension の Rule の下に配置されていることを確認してください。これにより、Authorization Extension の Rule の後で実行されます。 前のチュートリアル 1. ソリューションの概要 次のチュートリアル 3. API + モバイル実装