メインコンテンツまでスキップ

RBAC で API リソースを保護する

有効な JWT が存在することを確認してリソースを保護する API を保護する に加えて、ロールベースのアクセス制御 (RBAC) も適用できます。

この記事では、RBAC が認証 (Authentication) フローにおけるスコープの委任と検証にどのように影響するかに焦点を当てます。

認可 (Authorization) フローダイアグラム

この図からわかるように、基本的な API 保護との主な違いはスコープの処理です。要求されたすべてのスコープを直接付与する代わりに、Logto はユーザーの RBAC ポリシーに基づいてそれらをフィルタリングします。JWT トークンには、ユーザーがそのロールを通じて付与されたスコープのみが含まれます。API 側では、トークンの真正性を検証した後、要求されたリソースに必要なスコープがトークンに含まれていることを確認する追加のチェックがあります。

オプション: ユーザー権限の変更を処理する

ユーザーの権限はセッション中に変更されることがあります。たとえば、新しいロールが割り当てられたり、既存のロールの権限が変更されたりすることがあります。これらの変更を検出し、アプリケーションの UI を更新する必要がある場合があります。

ユーザーの権限が変更された場合、何が起こるでしょうか?2 つのケースがあります。

システムに新しい権限が導入されない場合

ユーザーの権限が変更された後でも、現在のアクセス トークンは有効期限が切れるまで有効です。ただし、新しい権限は後続のアクセス トークンに反映され、取り消された権限は省略されます。

ここにいくつかの 推奨アクション があります:

オプション 1: 短いアクセス トークンの有効期限を使用する

短命のアクセス トークンは、ユーザー権限のより頻繁な更新を保証します。Console の API リソース 設定でトークンの有効期限設定を構成します。欠点は、トークンの使用量が増えることです。

オプション 2: 動的に権限を確認する

Logto Management API エンドポイントを定期的に呼び出す(例:SWR)か、WebSocket などの技術を使用して長期間の接続を実装し、動的にユーザー権限を取得します。変更を検出した場合、既存のアクセス トークンをクリアし、新しく発行されたトークンには自動的に権限スコープの変更が反映されます。- API: ユーザー-ロール - API: ロール-権限

権限の変更が検出された場合、まずストレージからアクセス トークンをクリアし、次に SDK メソッド getAccessToken() を呼び出して新しいトークンを取得します。新しく発行されたアクセス トークンには権限の変更が反映されるはずです。

システムに新しい権限が導入され、ユーザーに割り当てられる場合

これは、システムに新しい権限が導入された場合に発生します。この場合、まず Logto クライアントを初期化する際に新しく導入された権限スコープを含める必要があります。例:

new LogtoClient({
appId: 'your-app-id',
redirectUrl: 'your-redirect-url',
resources: ['your-api-resource'],
scopes: [
// ... 既存の権限スコープ,
'new-scope',
],
});

次に、各クライアントアプリケーションは、新しい権限の変更を受け取るためにユーザーの再同意または再ログインが必要です。すると、新しい権限スコープが新しいアクセス トークンに反映されます。

再同意のコード例:

signIn({ redirectUrl: 'your-redirect-url', prompt: 'consent' });

Logto x Cloudflare Workers: パブリックアクセスからワーカーを保護する方法

マシン間通信のために API リソースを保護する