Auth0の運用ユーザ管理について - Delegated Administration -
概要
Auth0でユーザの管理だけヘルプデスクチームに任せたい(他の様々な機能は見せたくない)場合に、どうやれば良いのかすぐには分からなかったのでその方法を共有します。
Auth0の権限について
Auth0の管理ユーザの権限は、現状Adminしか存在しません。
そこで、Adminの権限の一部を委譲したユーザ管理画面アプリケーションを作成する、という方法で権限と使える機能をコントロールします。
Admin権限を委譲したユーザ管理画面アプリケーションを作成する具体的手段
Delegated Administration Dashboard
というextensionを使用します。
これを使用すると、ユーザ管理周りの権限を委譲したダッシュボードを作成できます。
作成方法
公式のDelegated Administration Extensionの記事があるので、そこに書かれている手順を踏めば作成できますが、いくつか注意事項があるのでそれを交えて簡単に説明します。
作成手順
Delegated Administration Extentionの資料より抜粋
-
Register an Application with Auth0
Auth0にユーザ管理アプリケーションを作成します -
Create a database connection
ユーザ管理アプリケーション認証用のAuth0DBを作成します -
Disable all other connections for your Auth0 Application
デフォルトでは、Auht0テナントで使用できる全ての認証方法が利用可能なので、ユーザ管理アプリケーション用に作成した認証DBの利用のみに制限します -
Create a user for the database connection
ユーザ管理アプリケーション用のユーザを作成します -
Assign roles to the user
ユーザ管理アプリケーション用のユーザに権限を設定します -
Install and configure the extension
Delegated Administration ExtensionをAuth0管理画面からインストールします -
Use the extension
Delegated Administration Extensionからユーザ管理画面アプリケーションにログインします
作成
Register an Application with Auth0
Create Delegated Admin Applicationsの資料に書かれている通りに、ユーザ管理画面アプリケーションを作成します。
コールバックURLはテナントのLocationによって異なるので注意してください。
このページに Next, you will need to install the Delegated Admin Extension.
と記載されてますが、一旦無視してください(一応この段階でインストールしても問題はないですが、手順は前後します)。
Create a database connection
Set Up Database Connectionsの資料にかかれている通り、ユーザ管理画面アプリケーション認証用のDBを作成します。
実はこれ作らなくてもGoogle Authなども利用可能ですが、後で認証方法は変更できるのでここではドキュメント通り作成してください。
コネクション名は利用する部署やチームの名前などを付けてください(例えば HelpDesk
とか)。
注意!:サインアップは利用不可にしてください
これ利用できちゃうと誰でもアクセス可能になってしまいます。
Disable all other connections for your Auth0 Application
ユーザ管理画面アプリケーションのコネクション設定を、先程作った認証以外は全て無効にしてください。
設定場所ちょっと分かりづらいですが下記画像のところです。
UIは変更になる可能性が高いので、もし変更になってたらすみません。
Create a user for the database connection
ユーザ管理画面アプリケーション用のユーザを作成します。
今の段階では特に特別なことはありません。
Assign roles to the user
ユーザにロールを設定します。
まず、ロールを設定する方法が現状大きく2つあります。
- Authorization Extensionを利用する
- Authorization Coreを利用する
詳しくはAuthorization Core vs. Authorization Extensionを参照してください。
ざっくり説明すると、 Authorization Extension
はDeprecatedです。
なので今から利用する場合は特別な理由がない限り Authorization Core
一択になります。
ロールの作成
Create Rolesを参考にロールを作成します。
Create Rolesのドキュメントでは事前にAPIとPermissionを作成してくださいと書かれていますが、不要です。
ロールの名前は***下記のいずれかをそのまま指定します。***独自のものを指定しないでください。
- Delegated Admin - User
- Delegated Admin - Administrator
- Delegated Admin - Auditor
- Delegated Admin - Operator
勘違いしやすいので(私も勘違いしました)重ねて書きますが、そのまま指定してください。
例えば Delegated Admin - User
とそのまま書いてください。
設定画面は下記のようになります。
作成したロールはユーザに割り当てておいてください。
ルールの作成
ロールをIDTokenに埋め込むルールを作成します。
ClientID
が必要になるので、Application情報からメモしておいてください。
ルールのコードサンプルは下記になります。
function (user, context, callback) {
if (context.clientID === 'CLIENT_ID') {
const namespace = 'https://example.com/auth0-delegated-admin';
context.idToken[namespace] = {
roles: (context.authorization || {}).roles
};
}
callback(null, user, context);
}
上記コードはドキュメントそのままですが、いくつか注意すべきことがあります。
ロール情報
下記のコードを見れば分かりますが、 作成してユーザに割り当てたロールの情報は user
ではなくて context
に入ってきます。
roles: (context.authorization || {}).roles
また、 roles
項目に必ず情報を入れる必要があります。
ロール情報は context.authorization.roles
で返ってくる構造がそのまま必要になります。
ちょっと大げさに書きましたが、構造というのはロール名の配列です。
いくつか注意点を書きましたが、ロールの設定はサンプルのコードで表現される構造の通りにしてください。
namespace
namespaceはURLである必要があります。
namespaceの例では、ドメインが example.com
になっています。
ここを変更する場合注意が必要です。
思わず テナント名.auth0.com
と指定したくなりますが(私はやってしまいました)、それを指定すると認証できなくなります。
詳細な説明は、Namespacing Claimsを参照してください。
ざっくり説明すると、以下のドメインは利用不可です。
- auth0.com
- webtask.io
- webtask.run
また、 auth0-delegated-admin
というパスは必ず必要です。勝手に独自のパスを設定したりしないようにしてください。
そのためnamespaceは必ず https://ドメイン/auth0-delegated-admin
というURL構造にしてください。
Install and configure the extension
Install the Delegated Admin Extensionを参考にDelegated Admin Extensionをインストールしてください。
特に難しくはないですし注意点もありません。
Use the extension
ユーザ管理画面アプリケーションに接続します。
Use the Delegated Admin Extensionを参考にしてください。
接続方法は、Extensions
画面から Delegated Administration Dashboard
アイコンをクリックします。
そうすると、ドキュメントに書かれてるログイン画面が表示されます。
まとめ
以上が簡単ではありますが、ユーザ管理画面アプリケーションであるDelegated Administartion Dashboardの作成方法です。
これでユーザの作成削除やパスワードの変更などが可能になります。
一点注意点を述べるとすると、 2019/12/12
時点ではロール管理はこのダッシュボードではできません。
Issueは出ているのでそのうち対応されるとは思います。
私はロール管理をこのダッシュボードでやりたいので期待して待っています。
では良いAuth0ライフを。