midPoint by OpenStandia Advent Calendar 2024 の23日目は、これまで構築してきた開発/検証環境の上で、今度はSaaSアプリケーションにプロビジョニングさせてみます。例として、クラウド型の認証サービス(いわゆるIdentity as a Service(IDaaS))の1つである、Auth0にユーザーをプロビジョニングします。
22日目で利用した開発/検証環境が前提となります。
追加コネクターの導入
22日目の記事と同じく、追加コネクターを入手してmidPointにロードさせます。
Auth0コネクターもSmartHRコネクターと同じで、Maven CentralからJARファイルの入手が可能です。curl
コマンドなどで取得して配置します。
$ curl -O --output-dir ./icf-connectors https://repo1.maven.org/maven2/jp/openstandia/connector/connector-auth0/1.2.1/connector-auth0-1.2.1.jar
環境の起動
Docker Composeで環境を起動します。midpoint_server
コンテナのログを見ると、追加したコネクターが起動時に認識されてロードされた旨を確認することができます。
midpoint_server | 2024-12-21 17:21:45,685 [PROVISIONING] [main] INFO (com.evolveum.midpoint.provisioning.impl.ProvisioningServiceImpl): Discovered local connector connector: ConnId jp.openstandia.connector.auth0.Auth0Connector v1.2.1 (OID:8114bf26-a1d0-42e5-9710-4c31ea6a1c56)
Auth0との連携
Auth0を連携先システムとして、midPointのユーザー情報をプロビジョニングするようにしてみます。やることは、接続先のコネクター種類が変わっただけであり、既に解説した以下のプロビジョニング系の記事と同じです。
基本的な設定の流れは上記の記事で既に解説済みのため、本記事ではAuth0固有の設定を中心に紹介します。
Auth0の準備
プロビジョニング先となるAuth0の環境が必要です。本記事では、Auth0のトライアル環境を利用して確認しています。試されたい方は、以下のページよりサインアップしてトライアル用の環境を準備してください。
Auth0の管理コンソールの「Create Application」からアプリケーションの作成を行い、midPointから接続用の「Client ID」と「Client Secret」を払い出します。作成するアプリケーションのタイプとしては「Machine to Machine Applications」を選択します。
認可するAPIの設定ではAuth0 Management API
を選択肢し、パーミッションを設定します。
Auth0コネクターとしては、他にはRoleとOrganizationも扱うことができますが、今回は使用しません。要件に応じてパーミッションを設定する必要があります。
リソースの作成
Auth0コネクターを正しく導入できていると、リソースの作成画面で「Auth0Connector」を選択できるようになっています。
用意したAuth0環境に合わせて、「Auth0 Domain」「Autho0 Client ID」「Auth0 Client Secret」を設定します。
もし、インターネットアクセスにHTTPプロキシが必要な環境であれば、設定項目がありますので必要に応じて設定します。
オブジェクトタイプ・スキーマでは、今回は「User_Username-Password-Authentication」のみを選択します。
Auth0コネクターはAuth0のDatabase Connectionsを取得し、自動的にオブジェクトタイプ・スキーマの候補に表示します。その際、「User_(Database名)」という名前になります。Auth0にはデフォルトで「Username-Password-Authentication」というConnectionが存在するので、今回はそれを使用します。
オブジェクトタイプの追加
midPointのユーザーをAuth0にプロビジョニングするため、オブジェクトタイプの追加を行います。
Userの追加
Auth0のユーザー用のオブジェクトタイプを追加します。
オブジェクトクラスにはUser_Username-Password-Authentication
を設定します。
midPointのユーザーをプロビジョニングしたいので、「タイプ」ではユーザー
を選択します。
アウトバウンドマッピングの設定
以下のように設定します。
同期の設定
11日目の記事「midPoint からCSVにプロビジョニングする」と同じ同期の設定をしておきます。
Correlationの設定
11日目の記事「midPoint からCSVにプロビジョニングする」と同様に、名寄せの設定をしておきます。
インバウンドマッピング
Auth0のemail
属性を使った名寄せ専用のインバウンドマッピングを作成しておきます。
Correlationの設定
作成したインバウンドマッピングを使用した名寄せルールを設定しておきます。
アクティベーションの設定
Auth0のユーザーはアカウントステータスを持っていますので、それもmidPointからプロビジョニングするように設定しておきます。
16日目の記事「midPoint からActive Directoryにプロビジョニングする(ユーザー編)」と同様の手順で設定します。
クレデンシャルの設定
Auth0の今回使用するConnectionのユーザーはパスワードを持っていますので、それもmidPointからプロビジョニングするように設定しておきます。
16日目の記事「midPoint からActive Directoryにプロビジョニングする(ユーザー編)」と同様の手順で設定します。
プロビジョニングの確認
リソースの設定が完了したので、プロビジョニングの動作を確認します。例として、22日目の記事でSmartHRより取り込んだユーザーを使用して確認します。
パスワードの設定
Auth0で今回使用するDatabase Connectionではパスワードが必須のため、事前にmidPointのユーザーにパスワードを設定しておきます。
パスワードには、Auth0で使用するDatabase Connectionのパスワードポリシーに準拠する値を設定してください。
リソースアサイン追加によるプロビジョニング
例によって、プロビジョニングを行うユーザーの詳細画面を開き、「アサイン > リソース」メニューからリソースを直接アサインする方法で動作確認します。
Auth0リソースを、「種類」はアカウント
、「用途」はdefault
を選択してアサイン追加します。
変更のプレビューを確認し、プロビジョニング内容を確認して保存します。
正常に保存できたら、プロジェクションができていることを確認しておきます。
プロジェクションの詳細も確認しておきます。Auth0よりユーザー情報を取得できていることを確認します。
Auth0側のログイン確認
プロビジョニングしたユーザーを利用して実際にログインできるかも確認してみましょう。Auth0の管理コンソールの「Getting Started」のページに、ログインフローを試す機能があります。「Try it out」リンクをクリックします。
ログイン画面が表示されるので、プロビジョニングしたユーザーのメールアドレスとパスワード(先ほどmidPointの画面から設定したパスワード)でログインします。
初回ログイン時にMFAセットアップが求められるので1、Google Authenticator等使用して設定します。
そのままログインフローを進めると、「It Works!」のページが表示されればログイン成功です。midPointからプロビジョニングした属性情報も確認できます。
まとめ
23日目では、midPointからSaaSアプリケーションへのプロビジョニングについて、Auth0を例に解説しました。既にプロビジョニングについては、11日目、16日目の記事などで解説済みでした。今回のプロビジョニングではコネクターが異なるだけで、midPoint側ではほぼ同じ設定手順で対応できることをご理解いただけたかと思います。
今回紹介したAuth0以外にも、コネクターリストにはいくつかSaaSアプリケーション向けのコネクターが掲載されていますので、ぜひ試してみてください。
明日は、midPoint 4.7で導入された新しい機能である、「シミュレーション(Simulation)」を紹介したいと思います。SaaSアプリケーションでは、開発者ごとに専用の開発/検証環境を用意することが難しく、接続先が共用環境となることが一般的です。また、一部のSaaSでは検証環境を準備するのが困難で、本番環境しか提供されない可能性もあります。また、プロジェクトの予算が制約となり、検証環境を用意できない場合もあります。そのような状況でmidPointから安易に更新を行うと、設定ミスや操作ミスによってデータを破壊し、大きな影響を与えてしまうかもしれません。「シミュレーション(Simulation)」はこうしたシチュエーションで非常に役立つ機能となりそうです。是非ご期待ください!
-
Auth0のセットアップ次第で変わります。 ↩