サンプルユースケース:認可のある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は、アクションでは処理できません。