認可拡張でルールを使用する
Auth0ルールを認可拡張と併用すると、次のようなことが可能になります:
発行されたトークンにカスタムクレームを追加します。
ユーザーのグループメンバーシップ、ロール、および権限を決定します。
ユーザーのグループ、ロール、および権限情報を
app_metadata
の一部として保存します。送信トークンにユーザーのグループ、ロール、および権限を追加します(これは、
openid groups permissions roles
スコープを介して要求できます)。
上記のロジックはルールの一部であるため、ログインのコンテキストでのみ実行されます。ユーザーがグループに追加またはグループから削除された場合、この変更はユーザーの次回ログイン後にのみAuth0に反映されます。
詳細については、「Auth0ルール」をお読みください。
発行されたトークンにカスタムクレームを追加する
トークンにカスタムクレームを追加するには、認可拡張がそれを行うことを許可する追加のルールを作成します。カスタムクレームは、名前空間付きまたは名前空間なしでもかまいません。
詳細については、「カスタムクレームを作成する
トークンに追加するクレームの数を制限する必要があります。
function (user, context, callback) {
var namespace = 'http://yourdomain/claims/'; // You can set your own namespace, but do not use an Auth0 domain
// Add the namespaced tokens. Remove any which is not necessary for your scenario
context.idToken[namespace + "permissions"] = user.permissions;
context.idToken[namespace + "groups"] = user.groups;
context.idToken[namespace + "roles"] = user.roles;
callback(null, user, context);
}
Was this helpful?
このルールは、認可拡張ルールの[after(後)]に実行する必要があります。これを確実に行うには、認可拡張ルールの下に配置してください。
/authorize
エンドポイントを呼び出すとき、またはLockを構成するときは、groups
、permissions
、および/またはroles
を指定して、scope
に必要な情報を指定する必要があります。
アプリのアクセスを制御する
また、アプリケーションへのアクセスを制御するなどの操作を行うために、認可拡張ルールの後に実行されるルールを記述することもできます。これを行う1つの方法は、アプリケーションメタデータを使用して、各アプリケーションに必要なロールを指定することです。
詳細については、ルールを使用したメタデータの管理をお読みください。
アプリのメタデータに必要なロールを設定する
ロールを使用してアプリのメタデータを設定できます。ロールとは、特定の機能セットを作成するためにグループ化された権限のグループです。この手順は、セットアップしたルールがどのアプリに対してアクションを実行するかを認識できるように、アプリに「タグ付け」することと考えることができます。
context.clientMetadata
フィールドをrequired_roles
で設定するには、Auth0 Dashboard> Applications>Applicationsで作業するアプリケーションを選択します。これにより、アプリケーションの[Settings(設定)]が表示されます。下にスクロールして、ページの下部にある[Show Advanced Settings(詳細設定を表示)]を選択します。[Application Metadata(アプリケーションメタデータ)]の下に、[Key(キー)]を
required_roles
に設定する項目を追加し、[Value(値)]フィールドにロールをコンマ区切り形式でリストします。フィールドを追加するには、[+ Add(+ 追加)]を選択します。終わったら、[Save Changes(変更を保存)]を選択します。これで、このアプリケーションからログインすると、
context.clientMetadata
に、入力したロール値の文字列を含むrequired_roles
が表示されます。
ルールを適用するアプリロールを作成する
各アプリにロールが関連付けられたので、コンテキスト内でこのアプリ情報を使用してルール実行を作成できます。
このルールを作成する前に、[Token Contents(トークンコンテンツ)]の下の[Roles(ロール)]を有効にし、認可拡張ルールを公開します。
このルールを追加し、生成された「auth0-authorization-extension」ルールの後にリストされていることを確認します。
required_roles
を設定したら、次の本文を持つ新しいルールを作成します:function (user, context, callback) { context.clientMetadata = context.clientMetadata || {}; if (context.clientMetadata.required_roles && context.clientMetadata.required_roles.length){ if (user.roles) { var _ = require('lodash'); var roles = context.clientMetadata.required_roles.split(','); var matchingRoles =_.filter(user.roles, function(roleName) { return _.includes(roles, roleName); }); if (matchingRoles && matchingRoles.length) { return callback(null, user, context); } } return callback(new UnauthorizedError('You do not have the required role to access ' + context.clientName)); } callback(null, user, context); }
Was this helpful?
/