SCIM 外部連携モジュール
UCIDM は SCIM 対応のサービスに対して ID 連携できます。
現状は以下のサービスに対して動作を確認できています。
- Salesforce
また、SCIM 対応サービスとの認証・認可においては以下に対応しています。
- OAuth 2.0
SCIM 外部連携モジュールはコンテナとして稼働させます。次のように compose.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:
DESTINATION_ID: "scim-001"
AMQP_URL: "${AMQP_URL}"
MONGO_USER: "${MONGO_USER}"
MONGO_PASSWORD: "${MONGO_PASSWORD}"
MONGO_HOSTS: "${MONGO_HOSTS}"
MONGO_REPLICA_SET: "${MONGO_REPLICA_SET}"
SCIM_OAUTH2_CLIENT_ID: "${SCIM_OAUTH2_CLIENT_ID}"
SCIM_OAUTH2_CLIENT_SECRET: "${SCIM_OAUTH2_CLIENT_SECRET}"
restart: "always"
ここで参照する環境変数は .env
に設定します。
起動時のオプション設定
entrypoint では次の設定ができます。
-verbose
: デバッグログを出力-jsonl
: JSON 形式でログを出力
環境変数の設定
環境変数 | 値 | 規定値 | 説明 |
---|---|---|---|
DESTINATION_ID | 任意 | – | 外部連携先 ID 管理画面で作成した外部連携先 ID を指定 |
AMQP_URL | 任意 | – | 接続する RabbitMQ の URL |
MONGO_USER | 任意 | – | 接続する MongoDB のユーザ名 |
MONGO_PASSWORD | 任意 | – | 接続する MongoDB のパスワード |
MONGO_HOSTS | 任意 | – | 接続する MongoDB のホスト |
MONGO_REPLICA_SET | 任意 | – | 接続する MongoDB のレプリカセットの名前 |
SCIM_OAUTH2_CLIENT_ID | 任意 | – | SCIM 対応サービスとの認証・認可で使用する OAuth2 クライアント ID |
SCIM_OAUTH2_CLIENT_SECRET | 任意 | – | SCIM 対応サービスとの認証・認可で使用する OAuth2 クライアントシークレット |
SCIMServiceType | 任意 | – | 外部連携先のサービスを指定します |
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 は次のマッピング設定をすることができます。
- 属性マッピング
それぞれのマッピング設定について説明します。
属性マッピング
次の 属性マッピング設定 を参考にしてください。
また、以下の属性は 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 では、外部連携処理の前後で任意のシェルスクリプトを実行することができます。
次の 外部連携の前処理/後処理で実行するスクリプトの配置 を参考に、スクリプトファイルを配置後、外部連携の前処理/後処理で実行するスクリプトの設定 を参考に、実行したいスクリプトファイルを指定してください。
SCIM 外部連携モジュールの留意事項
Salesforce に対してユーザーパスワード更新を行っても、その値は反映されません