midPoint からSaaSにプロビジョニングする（Auth0編）

[midPoint by OpenStandia Advent Calendar 2024](https://qiita.com/advent-calendar/2024/midpoint-by-openstandia) の23日目は、これまで構築してきた開発/検証環境の上で、今度はSaaSアプリケーションにプロビジョニングさせてみます。例として、クラウド型の認証サービス（いわゆるIdentity as a Service（IDaaS））の1つである、[Auth0](https://auth0.com/)にユーザーをプロビジョニングします。

:::note info
22日目で利用した開発/検証環境が前提となります。
:::

# 追加コネクターの導入

[22日目の記事](https://qiita.com/wadahiro/private/04128e9928ad0d0dd3f3)と同じく、追加コネクターを入手してmidPointにロードさせます。

https://docs.evolveum.com/connectors/connectors/

Auth0コネクターもSmartHRコネクターと同じで、Maven CentralからJARファイルの入手が可能です。`curl`コマンドなどで取得して配置します。

```console
$ 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
```

:::note info
JARファイルを配置したディレクトリへのマウント設定や、HTTPS接続のためのトラストストアのセットアップは[22日目の記事](https://qiita.com/wadahiro/private/04128e9928ad0d0dd3f3)で解説済みのため、実施済みであることを前提としています。詳細は、[22日目の記事](https://qiita.com/wadahiro/private/04128e9928ad0d0dd3f3)を参照してください。
:::

# 環境の起動

Docker Composeで環境を起動します。`midpoint_server`コンテナのログを見ると、追加したコネクターが起動時に認識されてロードされた旨を確認することができます。

```console
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のユーザー情報をプロビジョニングするようにしてみます。やることは、接続先のコネクター種類が変わっただけであり、既に解説した以下のプロビジョニング系の記事と同じです。

- [11日目の記事「midPoint からCSVにプロビジョニングする」](https://qiita.com/wadahiro/items/2bf1231e62a298483060)
- [16日目の記事「midPoint からActive Directoryにプロビジョニングする（ユーザー編）」](https://qiita.com/wadahiro/items/b5c9fa2d69c5cae0a8b9)


基本的な設定の流れは上記の記事で既に解説済みのため、本記事ではAuth0固有の設定を中心に紹介します。

# Auth0の準備

プロビジョニング先となるAuth0の環境が必要です。本記事では、Auth0のトライアル環境を利用して確認しています。試されたい方は、以下のページよりサインアップしてトライアル用の環境を準備してください。

https://auth0.com/jp/signup

Auth0の管理コンソールの「Create Application」からアプリケーションの作成を行い、midPointから接続用の「Client ID」と「Client Secret」を払い出します。作成するアプリケーションのタイプとしては「Machine to Machine Applications」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/9733e721-f65c-ae93-696f-84dd2644c705.png)

認可するAPIの設定では`Auth0 Management API`を選択肢し、パーミッションを設定します。

- `user`で検索してキャプチャのようにチェックを付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/063ab636-0135-f229-42b4-63fb6d15c2f7.png)

- `connection`で検索してキャプチャのようにチェックを付けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/709bcae5-ace0-1976-6a18-85cba11fffc1.png)

:::note info
Auth0コネクターとしては、他にはRoleとOrganizationも扱うことができますが、今回は使用しません。要件に応じてパーミッションを設定する必要があります。
:::


# リソースの作成

Auth0コネクターを正しく導入できていると、リソースの作成画面で「Auth0Connector」を選択できるようになっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/ae54c701-e3aa-dfdf-93a2-fc7ca94d06d7.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/6edb29e8-db76-7a94-be88-2aed58df2b6c.png)

用意したAuth0環境に合わせて、「Auth0 Domain」「Autho0 Client ID」「Auth0 Client Secret」を設定します。

:::note info
もし、インターネットアクセスにHTTPプロキシが必要な環境であれば、設定項目がありますので必要に応じて設定します。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/4560473f-16c7-dcb1-ac65-5a82c47cbce0.png)

オブジェクトタイプ・スキーマでは、今回は「User_Username-Password-Authentication」のみを選択します。

:::note info
Auth0コネクターはAuth0のDatabase Connectionsを取得し、自動的にオブジェクトタイプ・スキーマの候補に表示します。その際、「User_(Database名)」という名前になります。Auth0にはデフォルトで「Username-Password-Authentication」というConnectionが存在するので、今回はそれを使用します。
:::


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/5a2a3cc1-0853-e600-c010-d63d7b6a9131.png)


# オブジェクトタイプの追加

midPointのユーザーをAuth0にプロビジョニングするため、オブジェクトタイプの追加を行います。

## Userの追加

Auth0のユーザー用のオブジェクトタイプを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/e3d7238e-d051-4b01-967d-00f4115e2393.png)

オブジェクトクラスには`User_Username-Password-Authentication`を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/62155f8e-0462-0738-bbb6-4ee2f261b2ab.png)

midPointのユーザーをプロビジョニングしたいので、「タイプ」では`ユーザー`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/5acdaaf7-e7f0-e59d-1f07-971b04f626b5.png)

### アウトバウンドマッピングの設定

以下のように設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/34bb2bd3-7f29-949b-cf81-4e7dc1ecaf64.png)

### 同期の設定

[11日目の記事「midPoint からCSVにプロビジョニングする」](https://qiita.com/wadahiro/items/2bf1231e62a298483060)と同じ同期の設定をしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/358e28fe-e15a-f06c-9276-139dcd3268fc.png)

### Correlationの設定

[11日目の記事「midPoint からCSVにプロビジョニングする」](https://qiita.com/wadahiro/items/2bf1231e62a298483060)と同様に、名寄せの設定をしておきます。

#### インバウンドマッピング

Auth0の`email`属性を使った名寄せ専用のインバウンドマッピングを作成しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/8ca13962-b3fc-14ea-a46f-025ad61a51bc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/ae297b9d-4bf0-536e-18e4-1e406e5ef6c2.png)


#### Correlationの設定

作成したインバウンドマッピングを使用した名寄せルールを設定しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/ddd53592-e166-941e-50c3-79d77934894a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/7d810342-4de3-e3bf-018f-69e94a561b26.png)

## アクティベーションの設定

Auth0のユーザーはアカウントステータスを持っていますので、それもmidPointからプロビジョニングするように設定しておきます。

[16日目の記事「midPoint からActive Directoryにプロビジョニングする（ユーザー編）」](https://qiita.com/wadahiro/items/b5c9fa2d69c5cae0a8b9)と同様の手順で設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/b0fab216-3bc7-63e9-c667-f5081b6f728d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/27c835c9-6043-3ac5-cfe3-fe697bd1c076.png)



## クレデンシャルの設定

Auth0の今回使用するConnectionのユーザーはパスワードを持っていますので、それもmidPointからプロビジョニングするように設定しておきます。

[16日目の記事「midPoint からActive Directoryにプロビジョニングする（ユーザー編）」](https://qiita.com/wadahiro/items/b5c9fa2d69c5cae0a8b9)と同様の手順で設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/58d3919b-9e67-547c-c9cb-f9add6a89802.png)




# プロビジョニングの確認

リソースの設定が完了したので、プロビジョニングの動作を確認します。例として、[22日目の記事](https://qiita.com/wadahiro/private/04128e9928ad0d0dd3f3)でSmartHRより取り込んだユーザーを使用して確認します。


## パスワードの設定

Auth0で今回使用するDatabase Connectionではパスワードが必須のため、事前にmidPointのユーザーにパスワードを設定しておきます。

:::note warn
パスワードには、Auth0で使用するDatabase Connectionのパスワードポリシーに準拠する値を設定してください。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/8ff7e84e-fe41-4ab3-01b4-f7b20c853cbb.png)



## リソースアサイン追加によるプロビジョニング

例によって、プロビジョニングを行うユーザーの詳細画面を開き、「アサイン ＞ リソース」メニューからリソースを直接アサインする方法で動作確認します。

Auth0リソースを、「種類」は`アカウント`、「用途」は`default`を選択してアサイン追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/286e3be2-3251-9d95-8c04-7b0c6293f126.png)

変更のプレビューを確認し、プロビジョニング内容を確認して保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/4137fff2-0db0-540b-f4aa-cb4f140c57e9.png)

正常に保存できたら、プロジェクションができていることを確認しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/2068385c-f7fe-4686-b872-4629c7ba80fd.png)

プロジェクションの詳細も確認しておきます。Auth0よりユーザー情報を取得できていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/6c8a3d65-befd-7075-ccac-5dc729681532.png)

## Auth0側のログイン確認

プロビジョニングしたユーザーを利用して実際にログインできるかも確認してみましょう。Auth0の管理コンソールの「Getting Started」のページに、ログインフローを試す機能があります。「Try it out」リンクをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/27ad310b-1010-5d3d-1c64-57c73cbdc59e.png)

ログイン画面が表示されるので、プロビジョニングしたユーザーのメールアドレスとパスワード（先ほどmidPointの画面から設定したパスワード）でログインします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/cafbdf01-98cb-3d97-75de-83e2a81c7757.png)

初回ログイン時にMFAセットアップが求められるので[^1]、Google Authenticator等使用して設定します。

[^1]: Auth0のセットアップ次第で変わります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/ca6753bd-106d-2d45-c5f6-97288249d857.png)

そのままログインフローを進めると、「It Works!」のページが表示されればログイン成功です。midPointからプロビジョニングした属性情報も確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35233/d0db5c5d-322a-39dc-cf50-4053395fe5f7.png)


# まとめ

23日目では、midPointからSaaSアプリケーションへのプロビジョニングについて、Auth0を例に解説しました。既にプロビジョニングについては、[11日目](https://qiita.com/wadahiro/items/2bf1231e62a298483060)、[16日目](https://qiita.com/wadahiro/items/b5c9fa2d69c5cae0a8b9)の記事などで解説済みでした。今回のプロビジョニングではコネクターが異なるだけで、midPoint側ではほぼ同じ設定手順で対応できることをご理解いただけたかと思います。

今回紹介したAuth0以外にも、[コネクターリスト](https://docs.evolveum.com/connectors/connectors/)にはいくつかSaaSアプリケーション向けのコネクターが掲載されていますので、ぜひ試してみてください。

明日は、midPoint 4.7で導入された新しい機能である、「シミュレーション（Simulation）」を紹介したいと思います。SaaSアプリケーションでは、開発者ごとに専用の開発/検証環境を用意することが難しく、接続先が共用環境となることが一般的です。また、一部のSaaSでは検証環境を準備するのが困難で、本番環境しか提供されない可能性もあります。また、プロジェクトの予算が制約となり、検証環境を用意できない場合もあります。そのような状況でmidPointから安易に更新を行うと、設定ミスや操作ミスによってデータを破壊し、大きな影響を与えてしまうかもしれません。「シミュレーション（Simulation）」はこうしたシチュエーションで非常に役立つ機能となりそうです。是非ご期待ください！