ユースケースの例:ロールベースのアクセス制御(RBAC)
認可フローにロールベースのアクセス制御(RBAC)が必要になる理由と使い方について説明します。
例として、B2B向けのSaaS(Software as a Service:サービスとしてのソフトウェア)を非営利組織に提供しているA社を使います。非営利組織はA社のソフトウェアを使って、製品の作成と管理を行い、寄付が見込まれる人にマーケティングを行うことができます。A社のアプリケーションには、いくつかの異なるモジュールがあり、以下の2つが含まれます。
ギフトショップのPOS(販売時点情報管理)モジュール:非営利組織が期間限定でTシャツを販売するポップアップストアを効率よく作成して、売り上げを管理できるようにします。
マーケティングモジュール:非営利組織がニュースレターを作成して、寄付者に配信できるようにします。
A社はAuth0を使って、顧客の非営利組織によるアプリケーションの異なる部分へのアクセスを制御したいと考えています。RBACを使用しない場合、すべての非営利組織の職員とボランティアがアプリケーションの全機能にアクセスできてしまい、望ましくありません。特に、利用組織の1つは多様なボランティアが属している動物保護団体で、各ボランティアは自分が携わっている活動領域以外の知識はあまりありません。
そこでRBACを実装して、ギフトショップのPOSモジュールのユーザーに必要な次のアクセス権を作成します。
read:catalog-item
read:customer-profile
create:invoice
そして、管理しやすくするために、ロールを作成して「Gift Shop Manager
(ギフトショップマネージャー)」と名前を付け、これらのアクセス権をロールに追加します。
同様に、マーケティングモジュールのユーザー用には以下のアクセス権を作成します。
create:newsletter
edit:newsletter
delete:newsletter
send:newsletter
edit:distribution-list
そして、「Newsletter Admin
(ニュースレター管理者)」というロールを作成し、これらのアクセス権をロールに追加します。
これで、動物保護団体がボランティアのAstridさんをTシャツのポップアップストアに配属すると、「Gift Shop Manager
(ギフトショップマネージャー)」のロールを割り当てることができます。このロールをAstridさんに割り当てると、このロールに追加したすべてのアクセス権が付与されます。Astridさんはニュースレターの発行には関与しない(そしてメールを上手く使いこなせない)ため、「Newsletter Admin
(ニュースレター管理者)」のロールが割り当てられることはなく、したがってマーケティングモジュールにアクセスすることはできません。
技術的に説明すると、AstridさんがA社の製品にログインすると、Auth0はAstridさんの認証と認可を行い、返すアクセストークンにアクセス権を含めます。A社の製品はそのトークンを検査して、Astridさんにどのモジュールを表示するか判断します。
Auth0のRBACを使用することにより、複数の認可システムを別途構築して管理する必要がなくなります。その代わりに、認可では受信済みのトークンが使用されます。また、Astridさんが辞めたり、ギフトショップから譲渡プログラムに担当を変わることになった場合には、簡単にGift Shop Manager(ギフトショップマネージャー)ロールを削除して、新しいロールを割り当てることができます。
また、すべての顧客のロールやアクセス権を管理する作業がA社の手に負えなくなった場合には、Auth0 APIを使って製品内に1つのモジュールを作成し、顧客が独自のRBACを管理できるようにすることも可能です。そうすることで、負担が軽くなり、人件費も削減できます。