サンプルユースケース:認可のあるActions
Auth0 Actionsは、事前構成された認可ポリシーの決定結果を修正または補完できるため、Role-based Access Control(RBAC)だけでは対応できないより複雑なケースを処理することができます。Actionsは実行順序に基づいて、アクセストークンにアクセス許可が追加される前に、認可での決定を変更することができます。また、トークンの内容をカスタマイズすることもできます。
特定のアプリケーションに平日のみのアクセスを許可する
たとえば、平日のみにアクセスを許可したいアプリケーションがあるとします。新しいアクションを作成し、ログインフローにアクションを追加するためにLogin / Post Login
トリガーを選択します。以下のコードを[Actions Code Editor(アクションコードエディター)]にコピーします。
exports.onExecutePostLogin = async (event, api) => {
if (event.client.name === "APP_NAME") {
const d = new Date().getDay();
if (d === 0 || d === 6) {
api.access.deny("This app is only available during the week.");
}
}
}
Was this helpful?
そして、作成したアクションをログインフローに追加します。Actionsをフローにアタッチする方法については、「初めてアクションを作成する」の「アクションをフローにアタッチする」セクションをお読みください。
ユーザーが週末にアプリケーションにアクセスしようとした場合には、たとえ認証され、適切な権限があったとしても、アクセスが拒否されます。
企業ネットワーク内部のユーザーにのみアクセスを許可する
たとえば、アプリケーションへのアクセスを許可するのに、企業ネットワークの内側からアクセスするユーザーに限定したいとします。新しいアクションを作成し、ログインフローにアクションを追加するためにLogin / Post login
トリガーを選択します。以下のコードをActionsコードエディターにコピーします。
const ipaddr = require("ipaddr.js");
exports.onExecutePostLogin = async (event, api) => {
const corpNetwork = "192.168.1.134/26";
const currentIp = ipaddr.parse(event.request.ip);
if (!currentIp.match(ipaddr.parseCIDR(corpNetwork))) {
api.access.deny("This app is only available from inside the corporate network.");
};
};
Was this helpful?
そして、作成したアクションをログインフローに追加します。Actionsをフローにアタッチする方法については、「初めてアクションを作成する」の「アクションをフローにアタッチする」セクションをお読みください。
ユーザーが企業ネットワークの外側にいる場合には、たとえ認証に成功して、適切な権限があったとしても、アクセスが拒否されます。
APIを呼び出すユーザーすべてのアクセスを拒否する
たとえば、APIを呼び出すユーザーのすべてに対して、アクセスを拒否したいとします。つまり、[Auth0 Dashboard] > [Applications(アプリケーション)] > [APIs]から、APIオーディエンスフィールドに記載された識別子
の値に基づいてアクセスを拒否する必要があります。新しいアクションを作成し、ログインフローにアクションを追加するためにLogin / Post login
トリガーを選択します。以下のコードをActionsコードエディターにコピーします。
exports.onExecutePostLogin = async (event, api) => {
// In Actions, an API will be referred to as a Resource Server.
const { identifier } = event.resource_server || {};
if (identifier === "https://api.example.com") {
api.access.deny("end_users_not_allowed");
}
}
Was this helpful?
そして、作成したアクションをログインフローに追加します。Actionsをフローにアタッチする方法については、「初めてアクションを作成する」の「アクションをフローにアタッチする」セクションをお読みください。
この場合、APIのidentifier
の値はhttps://api.example.com
であり、これが拒否する対象となるオーディエンスです。
ユーザーのロールをトークンに追加する
Auth0が発行したトークンにユーザーロールを追加するには、event.authorization
オブジェクトとapi.idToken.setCustomClaim
およびapi.accessToken.setCustomClaim
メソッドを使用します。新しいアクションを作成し、ログインフローにアクションを追加するためにLogin / Post login
トリガーを選択します。以下のコードをActionsコードエディターにコピーします。
exports.onExecutePostLogin = async (event, api) => {
const namespace = 'https://my-app.example.com';
if (event.authorization) {
api.idToken.setCustomClaim(`${namespace}/roles`, event.authorization.roles);
api.accessToken.setCustomClaim(`${namespace}/roles`, event.authorization.roles);
}
}
Was this helpful?
そして、作成したアクションをログインフローに追加します。Actionsをフローにアタッチする方法については、「初めてアクションを作成する」の「アクションをフローにアタッチする」セクションをお読みください。
注意:
要求元のアプリケーションに返されるJWTは、トリガー処理の終わりに作成され、署名されます。最終の署名されたJWTは、アクションでは処理できません。