intra-mart Accel Platform 認可仕様書 第14版 2020-08-01

サブジェクト解決系

ここではユーザがどのサブジェクトに該当するかを判断するための機能について、説明します。

../../../_images/ContextAccessFlow.png

認可機構において、ユーザのサブジェクト解決処理は大きく2段階に分かれています。

  1. まずログイン時に、ログインユーザについてその時点で明確になるサブジェクトとサブジェクトグループを解決し、認可サブジェクトコンテキストに保持します。(上図の 1 )
  2. ページへのアクセスが発生したタイミングで認可要求が発生し、サブジェクト解決機能がこの時点でのサブジェクト解決を再度試みます。まず認可サブジェクトコンテキストに格納されている情報を取得し、これ以外に、このタイミングで追加で解決されるサブジェクトがあるかどうかをサブジェクトリゾルバを使って確認します。(上図の 2 )

認可サブジェクトコンテキストは、ユーザについて状況に左右されないサブジェクトをログインのタイミングでサブジェクト解決してコンテキストの情報として保持します。

具体的には、ユーザの所属組織や所属パブリックグループなどがこれにあたります。組織やパブリックグループはユーザがログインした時点でどの組織に所属しているか明確であるため、ログイン時に一括して取得し、該当するサブジェクト情報としてコンテキストに保持しておきます。

この時解決できたサブジェクトからサブジェクトグループについても解決を行い、保持します。サブジェクトグループの解決はサブジェクトグループの表す式からマッチするかどうかを判断します。サブジェクトグループのマッチング処理については 式のマッチング仕様 を参照してください。

これに対して後者のサブジェクトリゾルバはリソースにアクセスを要求する時点になって初めて判明するサブジェクトや、ログインユーザ以外についてのサブジェクトを得たい場合に使用されます。このためサブジェクトリゾルバはコンテキストのように一定期間保持される情報ではなく、直接データベースなどの一次情報からユーザのサブジェクトを解決することを求められます。

これら認可サブジェクトコンテキストやサブジェクトリゾルバとして情報を収集する実装はサブジェクトタイプ同様に拡張可能になっており、サブジェクトタイプとほぼセットで追加されなければなりません。

認可サブジェクトコンテキスト、および、サブジェクトリゾルバの詳細は以下を参照してください。