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

APIを作成する

左側のAPIメニューオプションをクリックし、[Create API(APIの作成)]ボタンをクリックします。 APIについて、以下の詳細を入力する必要があります。
  • [Name(名前)] :APIのフレンドリー名。機能性には影響しません。
  • [Identifier(識別子)] :APIに一意の識別子。URLの使用を推奨していますが、公開されたURLである必要はありません。Auth0がこのAPIを呼び出すことはありません。この値は後から変更することはできません。
  • (署名アルゴリズム)] : トークンの署名に使用するアルゴリズム。使用可能な値はHS256RS256です。RS256を選択すると、トークンはテナントの秘密鍵で署名されます。署名アルゴリズムの詳細については、「署名アルゴリズム」を参照してください。
Dashboard -アプリケーション API - APIの作成 - ポップアップ
必要な情報を入力し、[Create(作成)] ボタンをクリックします。

署名アルゴリズム

APIを作成する際には、トークンの署名に使用するアルゴリズムを選択する必要があります。署名は、の送信者が自称のとおりであることを検証し、メッセージが途中で変更されていないことを保証するために使用されます。
署名はJWTの一部です。JWTの構造に慣れていない場合は、「JSON Web Tokenの構造」を参照してください。
署名部分を作成するには、エンコードされたヘッダー、エンコードされたペイロード、シークレット、ヘッダーで指定されたアルゴリズムを使用して、それに署名します。APIに選択するのは、JWTヘッダーに含まれているHS256または RS256のアルゴリズムです。
  • RS256非対称アルゴリズムで、鍵には公開鍵と秘密鍵の2つがあります。Auth0は秘密鍵を保持して署名を生成し、JWTコンシューマーは公開鍵を保持して署名を検証します。
  • HS256対称アルゴリズムで、1つの秘密鍵が暗号化する側と復号化する側で共有されます。同じ鍵が署名の生成と検証の両方に使用されます。鍵が侵害されないように、細心の注意を払う必要があります。
RS256 の使用が最も安全で推奨されます。それには以下のような理由があります。
  • RS256では、秘密鍵の所有者(Auth0)のみがトークンに署名できる一方、誰でも公開鍵を使ってトークンの有効性を確認できます。
  • HS256では、秘密鍵が侵害されると、新しいシークレットでAPIをデプロイし直す必要があります。RS256では、複数のオーディエンスに有効なトークンを要求できます。
  • RS256では、新しいシークレットを使ってAPIをデプロイし直すことなく、鍵のローテーションを実装できます。
JWTの署名アルゴリズムについて詳しくは、「JSON Web Token(JWT)の署名アルゴリズムの概要」を参照してください。

アクセス許可を構成する

アプリケーションが作成されたら、認可の際にアプリケーションが要求できるアクセス許可を構成する必要があります。 APIの設定で、[Permissions(アクセス許可)] タブに移動します。このセクションでは、以前に説明した4つのスコープ(read:timesheetscreate:timesheetsdelete:timesheetsapprove:timesheets)すべてを追加することができます。
Dashboard - アプリケーション - API - アクセス許可

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

Autho0には、ネイティブアプリ (モバイルアプリまたはデスクトップアプリで使用)、シングルページWebアプリ通常のWebアプリマシンツーマシンアプリ (CLI、デーモン、またはバックエンドで実行中のサービスで使用)の4つのタイプのアプリケーションがあります。このシナリオでは、モバイルアプリケーション用に新しいアプリケーションを作成するため、アプリケーションタイプに[Native (ネイティブ)]を選びます。 新しいアプリケーションを作成するには、ダッシュボードに移動し、左側のメニューにある[Applications(アプリケーション)]をクリックします。[+ Create Application (アプリケーションの作成)] ボタンをクリックします。 アプリケーションの名前を設定し(ここでは「Timesheets Mobile」とします)、タイプに[Native App(ネイティブアプリ)]を選択します。 [Create(作成)] をクリックします。

認可拡張機能を構成する

テナントにAuthorization Extension(認可拡張機能)がインストールされていることを確認する必要があります。確認方法の詳細については、認可拡張機能に関するドキュメントを参照してください。

アクセス許可を定義する

すでに定義済みのスコープに関するアクセス許可を定義する必要があります。[Authorization Extension(認可拡張機能)]で[Permissions(アクセス許可)]タブをクリックし、[Create Permission(アクセス許可の作成)] ボタンをクリックします。ダイアログで、各アクセス許可の詳細を指定します。アクセス許可の名前が、対応するスコープと完全に同一であることを確認します。 引き続き、残りのすべてのスコープにアクセス許可を作成します。

ロールを定義する

[Roles(ロール)]タブに移動し、2つのロールを作成します。[Create Role(ロールの作成)] ボタンをクリックし、[Timesheets SPA(タイムシートSPA)] アプリケーションを選択します。ロールに「Employee(従業員)」という名前と説明を付けて、delete:timesheetscreate:timesheetsread:timesheetsのアクセス許可を選択します。[Save (保存)] をクリックします。 次に、同じ手順で「Manager(マネージャー) 」ロールを作成し、すべてのアクセス許可が選択されていることを確認します。
Dashboard - Extensions - Authorization Extension - Create Manager Role

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

すべてのユーザーを「Manager (マネージャー)」または「User(ユーザー)」ロールに割り当てる必要があります。[Authorization Extension(認可拡張機能)]の[Users(ユーザー)]タブに移動し、ユーザーを選択します。ユーザー情報画面で、[Roles(ロール)]タブに移動します。[Add Role to User(ユーザーにロールを追加)] ボタンをクリックし、ユーザーに適切なロールを選択することで、ユーザーにロールを追加することができます。

認可拡張機能を構成する

また、認可拡張機能に関するルールが公開されていることも確認する必要があります。これを実行するには、[Authorization Extension(認可拡張機能)]の右上にあるユーザーアバターをクリックして、[Configuration(構成)] オプションを選択します。 [Permissions(アクセス許可)] が有効になっていることを確認してから、[Publish Rule(ルールの公開)] ボタンをクリックします。

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

このプロセスの最後のステップでは、ユーザーに割り当てられた権限に基づいて、アクセストークンに含まれるスコープが有効であることを検証するルールを作成します。ユーザーに無効なすべてのスコープは必ず、アクセストークンから削除します。 で、[Rules(ルール)]タブに移動します。認可拡張機能によって作成されたルールが表示されているはずです。 [Create Role(ルールの作成)] ボタンをクリックし、[Empty Rule(空のルール)] テンプレートを選択します。このルールに「 Scopes(アクセストークンスのコープ)」のような名前を付けて、そのルールに次のコードを指定することができます。
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(ルール)]ページに表示されている順番に実行されます。そのため、作成した新しいルールが認可拡張機能のルールより下に来るようにしてください。そうすれば、認可拡張機能のルールより後に実行されます。 前のチュートリアル 1.ソリューションの概要 次のチュートリアル 3.API + モバイルの実装
I