組織の作成
マルチテナントアプリ(例:マルチテナント SaaS アプリ)を構築していると仮定します。このアプリは多くの顧客にサービスを提供し、それぞれの顧客が専用のテナントを所有しています。
組織 (Organization) は通常、次のタイミングで作成されます:
- 新しい顧客がサインアップし、自分のビジネス用のアカウントとテナントを作成する場合。
- 既存ユーザーがアプリ内から新しい組織 (Organization) を作成する場合。
組織 (Organization) 作成の実装
アプリで組織 (Organization) を作成する方法は 2 つあります。
Logto Console から作成
Logto Console の UI で手動で組織 (Organization) を作成します。Console > 組織 (Organizations) に移動し、組織 (Organization) の作成、メンバーやロールの割り当て、組織 (Organization) のサインイン体験のカスタマイズができます。
組織テンプレート を作成して、同じロールや権限を共有する類似の組織 (Organization) を一括作成できます。
Logto Management API から作成
Console は手動設定に便利ですが、多くのアプリではエンドユーザーがセルフサービスで組織 (Organization) を直接作成・管理できるようにします。その場合は、Logto Management API を使ってこれらの機能を実装します。
バックエンドがマシン間通信 (M2M) メカニズムを通じて Logto Management API に接続されており、M2M アクセストークンを取得していると仮定します。
Management API で組織 (Organization) を作成します(API リファレンス):
curl \
-X POST https://[tenant_id].logto.app/api/organizations \
-H "Authorization: Bearer $M2M_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"tenantId":"string","name":"string","description":"string","customData":{},"isMfaRequired":false,"branding":{"logoUrl":"string","darkLogoUrl":"string","favicon":"string","darkFavicon":"string"},"createdAt":1234567890}'
次に、ユーザーを組織 (Organization) のメンバーとして追加します(API リファレンス):
curl \
-X POST https://[tenant_id].logto.app/api/organizations/{id}/users \
-H "Authorization: Bearer $M2M_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"userIds":["string"]}'
必要に応じて、特定の組織 (Organization) ロールをユーザーに割り当てることもできます(API リファレンス)。
詳細は API 仕様全体 をご確認ください。
これらの呼び出しを独自の API レイヤーでラップしましょう。ユーザーがアプリで「組織 (Organization) を作成」アクションを実行した際、権限をチェックしてリクエストを検証し、その後 Logto Management API を呼び出して処理を完了させます。
ユーザーリクエストで組織トークン (Organization token) を検証する
アプリ内でユーザーが組織 (Organization) のコンテキストで操作を行う場合、通常のアクセス トークン (Access token) ではなく、組織トークン (Organization token) を使用する必要があります。組織トークン (Organization token) は、組織 (Organization) の権限を含む JWT です。アクセス トークン (Access token) と同様に、クレーム (Claims) をデコードし、「scope」クレーム (Claim) を検証して権限を強制できます。
認可 (Authorization) シナリオや組織トークン (Organization token) の検証方法については、認可 (Authorization) を参照してください。