> For AI agents: the complete documentation index is available at /resource/ucidm/docs/on-premise/1.8.0/llms.txt, the full documentation bundle is available at /resource/ucidm/docs/on-premise/1.8.0/llms-full.txt.

# SCIM 外部連携モジュール

UCIDM は SCIM 対応のサービスに対して ID 連携できます。

現状は以下のサービスに対して動作を確認できています。

- Salesforce

また、SCIM 対応サービスとの認証・認可においては以下に対応しています。

- OAuth 2.0

SCIM 外部連携モジュールはコンテナとして稼働させます。次のように `compose.yml` に設定します。

```yml
consumer-scim:
  depends_on:
    rabbitmq:
      condition: service_healthy
  container_name: consumer-scim
  image: docker.io/osstech/ucidm-consumer:latest
  logging: *default-logging
  ports:
    - 7099:7099
  volumes:
    - type: bind
      source: ./server-data
      target: /ucidm
      bind:
        create_host_path: false
  entrypoint:
    - ./bin/app-main
    - -verbose
    - -jsonl
  environment:
    TZ: "${TZ}"
    DESTINATION_ID: "scim-001"
    MONGO_USER: "${MONGO_USER}"
    MONGO_PASSWORD: "${MONGO_PASSWORD}"
    MONGO_HOSTS: "${MONGO_HOSTS}"
    MONGO_REPLICA_SET: "${MONGO_REPLICA_SET}"
    RABBITMQ_USER: "${RABBITMQ_USER}"
    RABBITMQ_PASSWORD: "${RABBITMQ_PASSWORD}"
    RABBITMQ_HOST: "${RABBITMQ_HOST}"
    SCIM_AUTH_TYPE: "client_credentials"
    SCIM_OAUTH2_CLIENT_ID: "${SCIM_OAUTH2_CLIENT_ID}"
    SCIM_OAUTH2_CLIENT_SECRET: "${SCIM_OAUTH2_CLIENT_SECRET}"
  restart: "always"

```

ここで参照する環境変数は `.env` に設定します。

## 起動時のオプション設定

entrypoint では次の設定ができます。

- `-verbose`: デバッグログを出力
- `-jsonl`: JSON 形式でログを出力

## 環境変数の設定

| 環境変数                      |        値       |  既定値  | 説明                                                                                                                                |
| :------------------------ | :------------: | :---: | :-------------------------------------------------------------------------------------------------------------------------------- |
| TZ                        |       任意       |   --  | タイムゾーン情報                                                                                                                          |
| DESTINATION_ID            |       任意       |   --  | 外部連携先 ID 管理画面で作成した外部連携先 ID を指定                                                                                                    |
| MONGO_USER                |       任意       |   --  | 接続する MongoDB のユーザ名                                                                                                                |
| MONGO_PASSWORD            |       任意       |   --  | 接続する MongoDB のパスワード                                                                                                               |
| MONGO_HOSTS               |       任意       |   --  | 接続する MongoDB のホスト                                                                                                                 |
| MONGO_REPLICA_SET         |       任意       |   --  | 接続する MongoDB のレプリカセットの名前                                                                                                          |
| RABBITMQ_USER             |       任意       |   --  | 接続する RabbitMQ のユーザ名                                                                                                               |
| RABBITMQ_PASSWORD         |       任意       |   --  | 接続する RabbitMQ のパスワード                                                                                                              |
| RABBITMQ_HOST             |       任意       |   --  | 接続する RabbitMQ のホスト                                                                                                                |
| SCIM_AUTH_TYPE            |       任意       |   --  | OAuth2 の認証・認可の方式を指定します。<br />指定できる値は以下になります。<br />- `client_credentials` (クライアントクレデンシャルズフロー)<br />- `access_token` (アクセストークン直接指定) |
| SCIM_ACCESS_TOKEN         |       任意       |   --  | SCIM API にアクセスする際に利用するアクセストークンを指定します。<br />`SCIM_AUTH_TYPE` が `access_token` の場合、この値は必須です。                                        |
| SCIM_OAUTH2_CLIENT_ID     |       任意       |   --  | SCIM 対応サービスとの認証・認可で使用する OAuth2 クライアント ID<br />`SCIM_AUTH_TYPE` が `client_credentials` の場合、この値は必須です。                               |
| SCIM_OAUTH2_CLIENT_SECRET |       任意       |   --  | SCIM 対応サービスとの認証・認可で使用する OAuth2 クライアントシークレット<br />`SCIM_AUTH_TYPE` が `client_credentials` の場合、この値は必須です。                            |
| SCIMServiceType           |       任意       |   --  | 外部連携先のサービスを指定します                                                                                                                  |
| ENABLE_SCRIPT_PASSWORD    | true または false | false | ユーザーパスワード更新時に外部連携の<br />前処理/後処理スクリプトにパスワードの値を連携するかどうか                                                                             |

## SCIM 動作設定

管理画面にて SCIM の動作設定をすることができます。

設定項目と内容は次になります。

- OAuth2 トークンエンドポイント URL
  - OAuth2 トークンエンドポイントの URL を指定します。
- OAuth2 スコープ
  - OAuth2 のスコープの値を指定したい場合には、ここで設定を行います。
- SCIM スキーマ URL
  - SCIM 対応サービスの Schema の URL を指定します。
- SCIM ユーザスキーマ
  - SCIM のユーザのスキーマを指定します（例：urn:ietf:params:scim:schemas:core:2.0:User）。複数指定可能です。
- SCIM グループスキーマ
  - SCIM のグループのスキーマを指定します（例：urn:ietf:params:scim:schemas:core:2.0:Group）。複数指定可能です。
- SCIM Users URL
  - SCIM 対応サービスの Users の URL を指定します。
- SCIM Groups URL
  - SCIM 対応サービスの Groups の URL を指定します。
- userName 属性の前につける固定値
  - 本 SCIM 外部連携モジュールにおいては、LDAP/AD から連携されてきた DN の RDN の値が userName として使われます。
  - userName の値を SCIM 対応サービスに送信するにあたり、RDN の値よりも前に付加したい文字列があれば指定します。
- userName 属性の後につける固定値
  - 本 SCIM 外部連携モジュールにおいては、LDAP/AD から連携されてきた DN の RDN の値が userName として使われます。
  - userName の値を SCIM 対応サービスに送信するにあたり、RDN の値よりも後に付加したい文字列があれば指定します。
- 連携先サービス
  - 外部連携先のサービスを指定します。指定できる値は以下になります。
    - Salesforce
    - Others
- ドライランモード
  - 接続の取得やエントリの検索は行いますが、実際にエントリの追加/変更/削除は行わないモードとなります。
  - 主にテスト時の動作確認等に使うことを想定しています。
- ユーザー追加/更新を行わない
  - SCIM 対応サービスに対してユーザー追加/更新を行わない場合は、この項目をオン（true）にしてください
- ユーザー削除を行わない
  - SCIM 対応サービスに対してユーザー削除を行わない場合は、この項目をオン（true）にしてください
- ユーザーパスワード更新を行わない
  - SCIM 対応サービスに対してユーザーパスワード更新を行わない場合は、この項目をオン（true）にしてください
- グループ追加/更新を行わない
  - SCIM 対応サービスに対してグループ追加/更新を行わない場合は、この項目をオン（true）にしてください
- グループ削除を行わない
  - SCIM 対応サービスに対してグループ削除を行わない場合は、この項目をオン（true）にしてください
- グループメンバー追加を行わない
  - SCIM 対応サービスに対してグループメンバー追加を行わない場合は、この項目をオン（true）にしてください
- グループメンバー削除を行わない
  - SCIM 対応サービスに対してグループメンバー削除を行わない場合は、この項目をオン（true）にしてください

## SCIM マッピング設定

SCIM は次のマッピング設定をすることができます。

- 属性マッピング

それぞれのマッピング設定について説明します。

### 属性マッピング

次の [属性マッピング設定](/resource/ucidm/docs/on-premise/1.8.0/administration/admin-ui/mappings.md) を参考にしてください。

また、以下の属性は SCIM 外部連携モジュール独自のマッピングになるため、合わせてご参照ください。

- SCIM では階層構造を持つ属性があります。
  - 例えば、name 内の givenName に対して属性値をマッピングする場合は、「name.givenName」に対してマッピングをする必要があります。
- また、SCIM では階層構造に加えて、配列を持つ属性があります。
  - 例えば、emails 内の 最初の配列要素における、value に対して属性値をマッピングする場合は、「emails.0.value」に対してマッピングをする必要があります。
  - 配列の要素番号は、0, 1, 2, ... の形で 0 から始める番号で指定する必要があります。

#### ユーザ属性

##### userName 属性

本 SCIM 外部連携モジュールにおいては、primaryID の値が userName として使われます。

primaryID の値の前や後に何か文字列を付加して userName の属性値としたい場合は、前述の「userName 属性の前につける固定値」や「userName 属性の後につける固定値」の設定をしてください。

##### active 属性

ユーザの有効化/無効化を制御するために主に使われる属性となります。（詳しくは SCIM 各連携先の公式マニュアル等をご参照ください。）

SCIM 連携先がこの属性を有効化/無効化のフラグとして使っている場合には、本属性に対して true/false が設定されるようマッピングを行うことで、ユーザの有効化/無効化
のステータスを制御することができます。

#### グループ属性

##### displayName 属性

本 SCIM 外部連携モジュールにおいては、primaryID の値が displayName として使われます。

### 前処理・後処理スクリプト設定

UCIDM では、外部連携処理の前後で任意のシェルスクリプトを実行することができます。

次の [外部連携の前処理/後処理で実行するスクリプトの配置](/resource/ucidm/docs/on-premise/1.8.0/configuration/destination/script.md) を参考に、スクリプトファイルを配置後、[外部連携の前処理/後処理で実行するスクリプトの設定](/resource/ucidm/docs/on-premise/1.8.0/configuration/destination/script.md) を参考に、実行したいスクリプトファイルを指定してください。

## SCIM 外部連携モジュールの留意事項

Salesforce に対してユーザーパスワード更新を行っても、その値は反映されません
