アプリレベルのアクセス制御
アプリレベルのアクセス制御を利用すると、特定のアプリケーションにサインインできるユーザーを制限できます。Logto テナント内のすべての登録ユーザーがすべてのアプリにアクセスできるのではなく、ユーザー、ユーザーロール、組織、または組織ロールに基づいて各アプリケーションごとに許可ルールを作成できます。
アプリレベルのアクセス制御は、次のような場合に利用します:
- 社内アプリを従業員や管理者のみに公開したい場合。
- Protected App を特定のユーザーグループのみに制限したい場合。
- 特定の顧客やパートナーだけが サードパーティ OIDC / OAuth アプリケーション にアクセスできるようにしたい場合。
- 新しいアプリケーションを全体公開する前にパイロットグループに展開したい場合。
仕組み
アプリレベルのアクセス制御が無効な場合、Logto テナント内のすべての登録ユーザーがそのアプリケーションにサインインできます。
有効にすると、ユーザーは少なくとも 1 つの設定済みルールに一致した場合のみアプリケーションにアクセスできます。ユーザーがどのルールにも一致しない場合、Logto はサインイン試行を拒否し、アプリケーションがトークンを受け取る前にアクセス拒否ページを表示します。
アプリレベルのアクセス制御は、認可 (Authorization) フローおよびトークンの更新時に評価されます。つまり:
- アクセス権のないユーザーは、アプリケーションのサインインを完了する前にブロックされます。
- 既存のアプリ権限は、リフレッシュトークンを使用して新しいトークンをリクエストする際に再度チェックされます。
- ルールの更新は、ユーザーのグローバルな Logto セッションを変更することなく、今後の認可 (Authorization) およびトークン更新チェックに影響します。
アプリレベルのアクセス制御は ロールベースのアクセス制御 (RBAC) とは別物です。RBAC はアクセス トークン内の権限(スコープ)を発行することで、認証 (Authentication) 後にユーザーが何をできるかを制御します。アプリレベルのアクセス制御は、ユーザーが特定のアプリケーションにそもそもアクセスできるかどうかを制御します。
ルールの種類
次の許可ルールを設定できます:
| ルールの種類 | 許可される内容 |
|---|---|
| ユーザー | 特定のユーザーがアプリケーションにアクセスできます。 |
| ユーザーロール | 選択したユーザーロールに割り当てられたユーザーがアプリケーションにアクセスできます。 |
| 組織 | 選択した組織のすべての現在および将来のメンバーがアプリケーションにアクセスできます。 |
| 組織ロール | 選択した組織内で選択した組織ロールを持つメンバーがアプリケーションにアクセスできます。 |
ルールは加算式です。ユーザーは 1 つのルールに一致すればアプリケーションにアクセスできます。
例えば、アプリケーションに「サポートチーム」ユーザーロールルールと「BigTree - 管理者」組織ロールルールの両方がある場合、ユーザーがサポートチームロールに割り当てられているか、BigTree 組織で管理者であればアプリケーションにアクセスできます。
アプリレベルのアクセス制御を設定する
- コンソール > アプリケーション に移動します。
- 制限したいアプリケーションを開きます。
- ルール タブに移動します。
- カスタム許可ルール で ルールを追加 をクリックします。
- ルールの種類を選択します:
- ユーザー
- ユーザーロール
- 組織
- 組織ロール
- アプリケーションへのアクセスを許可したいユーザー、ロール、組織、または組織ロールを選択します。
- アクセス制御を有効にする をオンにします。
- 変更を保存 をクリックします。
アクセス制御を有効にする前に、少なくとも 1 つの許可ルールを設定する必要があります。これにより、誰もアプリケーションにアクセスできない状態で誤ってアクセス制御を有効にすることを防ぎます。
ルールの編集または削除
アプリケーションの ルール タブから許可リストを更新できます。
- ルールを追加するには、ルールテーブルの下にある さらに追加 をクリックします。
- ルールを削除するには、ルール行の削除ボタンをクリックし、操作を確認します。
- ルールを追加または削除した後、変更を保存 をクリックして更新を適用します。
アクセス制御が有効な場合、Logto は少なくとも 1 つのルールが設定されていることを要求します。すべてのルールを削除するには、まず アクセス制御を有効にする をオフにしてから、変更を保存してください。
ルール変更がユーザーに与える影響
アプリレベルのアクセス制御は、ユーザーのグローバルな Logto セッションを終了しません。ユーザーは引き続き Logto や他のアプリケーションにサインインしたままの場合があります。
制限対象のアプリケーションについて:
- もはやどの許可ルールにも一致しなくなったユーザーは、次回アプリケーションの認可 (Authorization) フローを通過する際にブロックされます。
- すでにアプリ関連の権限を持っている場合、アプリケーションがリフレッシュトークンを使って新しいトークンをリクエストする際に再度ルールがチェックされます。ユーザーがもはやアクセス権を持たない場合、Logto はトークンリクエストを拒否します。
これにより、アクセス判断がアプリケーション単位で行われ、他のアプリケーションへの不要な影響を避けることができます。
サードパーティアプリの権限との関係
サードパーティアプリケーション では、アプリレベルのアクセス制御と権限管理は異なる課題を解決します:
- アプリレベルのアクセス制御 は、ユーザーがサードパーティアプリケーションにサインインできるかどうかを決定します。
- 権限管理 は、サードパーティアプリケーションが同意画面でリクエストできるユーザープロフィールスコープ、API リソーススコープ、組織スコープを決定します。
両方が設定されている場合、ユーザーはサードパーティアプリケーションを認可 (Authorization) する前にアプリレベルのアクセス制御を通過する必要があります。
Protected App との関係
Protected App では、アプリレベルのアクセス制御によって、Logto の認証 (Authentication) レイヤーを通過して保護されたオリジンサーバーに到達できるユーザーが制限されます。
Protected App の認証 (Authentication) ルールは、どのルートが認証 (Authentication) を必要とするかを決定します。アプリレベルのアクセス制御は、認証 (Authentication) 済みの Logto ユーザーのうち、Protected App アプリケーションにアクセスできるユーザーを決定します。
ベストプラクティス
- 可能な限りユーザーロールまたは組織ロールルールから始めましょう。個別ユーザーの長いリストよりも管理が簡単です。
- 組織内の全員がアプリにアクセスすべき場合は、組織ルールを使用しましょう。
- 組織内の特定メンバーだけがアプリにアクセスすべき場合は、組織ロールルールを使用しましょう。
- ユーザーのロール変更、組織への参加・離脱時にはアクセスルールを見直しましょう。
- RBAC の権限とアプリレベルのアクセス制御は頭の中で分けて考えましょう:アプリレベルのアクセス制御は「このユーザーはこのアプリにアクセスできるか?」、RBAC は「このユーザーは API や組織機能にアクセスした後に何ができるか?」に答えます。