UCIDM API
UCIDM は ID 連携のための Web API を提供します。
さまざまな機能を提供します。
- ユーザ操作
- グループ操作
- 外部連携先設定操作
- 履歴情報一覧
- ジョブ進捗概要取得
- ジョブ詳細情報取得
- LDAP サーバー管理
UCIDM API はコンテナとして稼働させます。次のように compose.yml
に設定します。
api:
depends_on:
mongo:
condition: service_healthy
rabbitmq:
condition: service_healthy
container_name: api
hostname: api
image: docker.io/osstech/ucidm-api:latest
logging: *default-logging
volumes:
- type: bind
source: ./server-data
target: /ucidm
bind:
create_host_path: false
- type: bind
source: ./server-data/files
target: /files
bind:
create_host_path: true
#- type: bind
# source: ./path/to/example.crt
# target: /saml/ucidm_samlsp.crt
# read_only: true
# bind:
# create_host_path: false
#- type: bind
# source: ./path/to/example.key
# target: /saml/ucidm_samlsp.key
# read_only: true
# bind:
# create_host_path: false
entrypoint:
- ./bin/entrypoint.sh
- -port
- ${API_PORT}
- -jsonl
environment:
TZ: "${TZ}"
AMQP_URL: "${AMQP_URL}"
MONGO_USER: "${MONGO_USER}"
MONGO_PASSWORD: "${MONGO_PASSWORD}"
MONGO_HOSTS: "${MONGO_HOSTS}"
MONGO_REPLICA_SET: "${MONGO_REPLICA_SET}"
JWT_SECRET_KEY: "${JWT_SECRET_KEY}"
JWT_ACCESS_EXPIRATION_TIME: "${JWT_ACCESS_EXPIRATION_TIME}"
JWT_REFRESH_EXPIRATION_TIME: "${JWT_REFRESH_EXPIRATION_TIME}"
XFF_TRUST_IP_RANGES: "${XFF_TRUST_IP_RANGES}"
ID_FEDERATION_CLIENT_HOST: "${ID_FEDERATION_CLIENT_HOST}"
SMTP_HOST: "${SMTP_HOST}"
SMTP_PORT: "${SMTP_PORT}"
SMTP_AUTH_USERNAME: "${SMTP_AUTH_USERNAME}"
SMTP_AUTH_PASSWORD: "${SMTP_AUTH_PASSWORD}"
SMTP_USE_TLS: "${SMTP_USE_TLS}"
PASSWORD_RESET_MAIL_SENDER: "${PASSWORD_RESET_MAIL_SENDER}"
PASSWORD_RESET_REQUEST_MAIL_TEMPLATE_FILE: "${PASSWORD_RESET_REQUEST_MAIL_TEMPLATE_FILE}"
PASSWORD_RESET_SUCCESS_MAIL_TEMPLATE_FILE: "${PASSWORD_RESET_SUCCESS_MAIL_TEMPLATE_FILE}"
PASSWORD_RESET_LDAP_MAIL_ATTRIBUTE: "${PASSWORD_RESET_LDAP_MAIL_ATTRIBUTE}"
# USER_PRIMARY_ID_TEMPLATE: "${USER_PRIMARY_ID_TEMPLATE}"
# GROUP_PRIMARY_ID_TEMPLATE: "${GROUP_PRIMARY_ID_TEMPLATE}"
LDAP_SCHEME: "${AGENT_LDAP_SCHEME}"
LDAP_HOSTS: "${AGENT_LDAP_HOSTS}"
LDAP_PORT: "${AGENT_LDAP_PORT}"
LDAP_SECURE_SKIP: "${AGENT_LDAP_SECURE_SKIP}"
# SSL_CERT_FILE: "${SSL_CERT_FILE}"
LDAP_BIND_DN: "${AGENT_LDAP_BIND_DN}"
LDAP_BIND_PASSWORD: "${AGENT_LDAP_BIND_PASSWORD}"
LDAP_SEARCH_BASE: "${AGENT_LDAP_SEARCH_BASE}"
LDAP_USER_SEARCH_BASE: "${AGENT_LDAP_USER_SEARCH_BASE}"
LDAP_USER_SEARCH_FILTER: "${AGENT_LDAP_USER_SEARCH_FILTER}"
LDAP_GROUP_SEARCH_BASE: "${AGENT_LDAP_GROUP_SEARCH_BASE}"
LDAP_GROUP_SEARCH_FILTER: "${AGENT_LDAP_GROUP_SEARCH_FILTER}"
LDAP_GROUP_MEMBER_ATTRIBUTE: "${AGENT_LDAP_GROUP_MEMBER_ATTRIBUTE}"
# SAML_SP_ENTITY_ID: "${SAML_SP_ENTITY_ID}"
# SAML_SP_ROOT_URL: "${SAML_SP_ROOT_URL}"
# SAML_SP_IDP_METADATA_URL: "${SAML_SP_IDP_METADATA_URL}"
# SAML_SP_TLS_SKIP_VERIFY_FETCH_IDP_METADATA: "${SAML_SP_TLS_SKIP_VERIFY_FETCH_IDP_METADATA}"
# SAML_SP_COOKIE_EXP_TIME: "${SAML_SP_COOKIE_EXP_TIME}"
ports:
- 127.0.0.1:${API_PORT}:${API_PORT}
restart: "always"
ここで参照する環境変数は .env
に設定します。
環境変数の設定
API サーバー
環境変数 | 値 | 規定値 | 説明 |
---|---|---|---|
TZ | 任意 | – | タイムゾーン情報 |
API_PORT | 18080 | – | 接続を受け付けるポート番号 |
BASIC_AUTH_PASSWORD | 任意 | – | Basic 認証のためのパスワード |
JWT_SECRET_KEY | 任意 | – | JWT の署名に使用 |
JWT_ACCESS_EXPIRATION_TIME | 任意 | 1h | アクセストークンの有効期限 |
JWT_REFRESH_EXPIRATION_TIME | 任意 | 2160h | リフレッシュトークンの有効期限 |
XFF_TRUST_IP_RANGES | 任意 | – | X-Forwarded-For ヘッダーで指定される信頼するネットワーク (CIDR表記) |
ID_FEDERATION_CLIENT_HOST | 任意 | consumer-local-001:7099 | 外部連携モジュールのバージョン情報をリクエストする宛先となるホストを指定 |
USER_PRIMARY_ID_TEMPLATE | 任意 | – | ユーザーの primaryID 作成のためのテンプレート文字列 |
GROUP_PRIMARY_ID_TEMPLATE | 任意 | – | グループの primaryID 作成のためのテンプレート文字列 |
-
ID_FEDERATION_CLIENT_HOST
(外部連携モジュールのコンテナ) はバージョン情報を取得するときの宛先を設定します- 複数の外部連携モジュールのコンテナを利用していたとしても、どれか1つのコンテナのポート番号を指定します
- ここで取得されるバージョン情報は 1 時間キャッシュされます。外部連携モジュールのコンテナを更新したとき、最大 1 時間はバージョン情報が更新されない可能性があります
-
API サーバーは X-Forwarded-For (以下 XFF) ヘッダーを参照してリクエスト元 IP アドレスを履歴に記録します
- 信頼できるネットワークはカンマ区切りで複数指定できます
- 設定例) 192.168.0.1/24,172.16.0.0/12,2001:db8::/64
- 指定しないときはコンテナネットワークのゲートウェイ (172.18.0.1) がリクエスト元 IP アドレスとなります
- 信頼できるネットワークはカンマ区切りで複数指定できます
-
JWT_ACCESS_EXPIRATION_TIME
/JWT_REFRESH_EXPIRATION_TIME
の有効期限は次の記法で設定します- 5 秒に設定する場合 “5s” を環境変数に設定します
- 5 分に設定する場合 “5m” を環境変数に設定します
- 5 時間に設定する場合 “5h” を環境変数に設定します
- 日数は時間に変換して設定します。5 日の場合 “120h” を環境変数に設定します
primaryID
UCIDM では、各ユーザー/グループを一意に識別するための ID として primaryID を使用します。
primaryID はデフォルトでは DN 文字列の RDN0 の値が割り当てられます。
例) cn=test1,ou=people,dc=example,dc=com という DN であれば test1 が primaryID になる
ここで primaryID は必ず一意となるように設定する必要があります。仮に DN 文字列の RDN0 の値のみだと競合してしまうような場合は USER_PRIMARY_ID_TEMPLATE
と GROUP_PRIMARY_ID_TEMPLATE
のテンプレート文字列を使って一意になるような値を割り当ててください。
例) “%{cn}-%{uid}” と設定した場合、属性の cn=test1, uid=101 ならば test1-101 が primaryID になる
primaryID は、Microsoft Entra ID、Google Workspace、AD、SCIM の外部サービスへの連携において主要なキー情報として連携されます。仕様上の制約 もご確認ください。
ミドルウェア
環境変数 | 値 | 規定値 | 説明 |
---|---|---|---|
MONGO_USER | 任意 | – | 接続する MongoDB のユーザ名 |
MONGO_PASSWORD | 任意 | – | 接続する MongoDB のパスワード |
MONGO_HOSTS | 任意 | – | 接続する MongoDB のホスト |
MONGO_REPLICA_SET | 任意 | – | 接続する MongoDB のレプリカセットの名前 |
AMQP_URL | 任意 | – | 接続する RabbitMQ の URL |
MAX_PRODUCER_SESSIONS | 任意 | 512 | RabbitMQ Procuder の最大セッション数 |
メールサーバー
環境変数 | 値 | 規定値 | 説明 |
---|---|---|---|
SMTP_HOST | 任意 | – | SMTP サーバーのホスト名 |
SMTP_PORT | 任意 | 465 | SMTP サーバーのポート番号 |
SMTP_AUTH_USERNAME | 任意 | – | SMTP サーバーの認証で使用するユーザー名 |
SMTP_AUTH_PASSWORD | 任意 | – | SMTP サーバーの認証で使用するパスワード |
SMTP_AUTH_METHOD | PLAIN, XOAUTH2, CRAM-MD5, NOAUTH | PLAIN | SMTP サーバーの認証方法 |
SMTP_USE_TLS | true または false | true | SMTP サーバーの TLS の有効/無効 |
SMTP_USE_STARTTLS | true または false | false | SMTP サーバーの STARTTLS の有効/無効 |
SMTP_SECURE_SKIP | true または false | false | SMTP サーバーの 任意の証明書を許可 |
SMTP プロトコルの OAuth 2.0 認証
Google Workspace では SMTP サーバーと OAuth 2.0 認証 を行うことが推奨されています。次のツールを使ってクライアントシークレットと認証コードからリフレッシュトークンを取得できます。リフレッシュトークンがないと、アクセストークンの有効期限が切れたときに再取得できません。ツールを実行すると、クライアントシークレットと認証コードが求められるので入力します(入力時、文字は表示されません)。
./bin/oauth -clientID <OAuth 2.0 認証で使用するクライアントID> -redirectURL <OAuth 2.0 認証で設定したリダイレクトURL> -authURL <OAuth 2.0 認証の認証エンドポイント> -tokenURL <OAuth 2.0 認証のトークンエンドポイント> -scope <OAuth 2.0 認証で設定したスコープ>
出力
access token: xxxxa0AfB_byAY5...
refresh token: yyyy0elQbS2Fscsi5...
パスワードリセットメール
環境変数 | 値 | 規定値 | 説明 |
---|---|---|---|
PASSWORD_RESET_ EXPIRATION_TIME | 任意 | 1h | パスワードリセットの有効期限 |
PASSWORD_RESET_ MAIL_SENDER | 任意 | noreply@example.com | パスワードリセットメールの 送信元メールアドレス |
PASSWORD_RESET_REQUEST_ MAIL_TEMPLATE_FILE | 任意 | ./template/reset-request.eml | パスワードリセットメールの テンプレートファイルパス |
PASSWORD_RESET_SUCCESS_ MAIL_TEMPLATE_FILE | 任意 | ./template/reset-success.eml | パスワードリセット成功メールの テンプレートファイルパス |
PASSWORD_RESET_ LDAP_MAIL_ATTRIBUTE | 任意 | パスワードリセット時に使用するLDAP属性 |
パスワードリセット向けメールのテンプレートファイル
アカウントのパスワードを忘れたときにメールを送信してパスワードリセットできます。メールのテンプレートファイルを使ってパスワードリセットメールをカスタマイズできます。
メールのテンプレートファイルでは、次のフィールドに対してテンプレート変数を使ってカスタマイズします。
フィールド名 | 説明 |
---|---|
From | パスワードリセットメールの送信元メールアドレス |
To | パスワードリセットメールの送信先メールアドレス |
Reply-To | パスワードリセットメールの返信先メールアドレス |
Subject | パスワードリセットメールの件名 |
以下の変数をテンプレートファイルに記述することで、値が入ったメール送信が可能になります。
テンプレート変数 | 説明 |
---|---|
{{.SenderMailAddress}} | 環境変数 PASSWORD_RESET_MAIL_SENDER の設定値 |
{{.UserName}} | パスワードリセットを行うユーザー名 |
{{.UserMailAddress}} | パスワードリセットメールの送信先メールアドレス |
{{.TemporaryToken}} | パスワードリセットで使用する一時トークン |
テンプレートファイルのサンプル設定は次になります。メールヘッダーと本文の間には空行を入れてください。
一時トークンを送付するメールテンプレートのサンプル
From: 送信者名 <{{.SenderMailAddress}}>
To: {{.UserName}} <{{.UserMailAddress}}>
Reply-To: 返信しないで <no-reply@osstech.co.jp>
Subject: パスワードリセット
パスワードをリセットするための一時トークンを送ります。
このトークンを使って管理画面からパスワードリセットしてください。
一時トークン: {{.TemporaryToken}}
一定時間経過するとパスワードリセットができなくなります。
パスワードリセット完了を連絡するメールテンプレートのサンプル
From: 送信者名 <{{.SenderMailAddress}}>
To: {{.UserName}} <{{.UserMailAddress}}>
Subject: パスワードリセット成功
新しいパスワードに更新されました。
OAuth 認証
環境変数 | 値 | 規定値 | 説明 |
---|---|---|---|
OAUTH_CLIENT_ID | 任意 | – | OAuth 2.0 認証で使用するクライアント ID |
OAUTH_CLIENT_SECRET | 任意 | – | OAuth 2.0 認証で使用するクライアントシークレット |
OAUTH_REFRESH_TOKEN | 任意 | – | OAuth 2.0 認証で使用するリフレッシュトークン |
OAUTH_AUTH_URL | 任意 | – | アクセストークンを発行する認証エンドポイント |
OAUTH_TOKEN_URL | 任意 | – | アクセストークンを発行するトークンエンドポイント |
LDAP サーバー
環境変数 | 値 | 規定値 | 説明 |
---|---|---|---|
LDAP_SCHEME | ldap または ldaps | ldap | 接続する LDAP サーバーのプロトコル |
LDAP_HOSTS | 任意 | – | 接続する LDAP サーバーのホスト名 カンマ(,)区切りで複数指定 |
LDAP_PORT | 任意 | – | 接続する LDAP サーバーのポート番号 |
LDAP_SECURE_SKIP | true または false | false | 接続する LDAP サーバーの任意の証明書を許可 |
SSL_CERT_FILE | 任意 | – | LDAP サーバーとの接続において 信頼する CA 証明書を指定 |
LDAP_BIND_DN | 任意 | – | 接続する LDAP サーバーの bind ユーザー |
LDAP_BIND_PASSWORD | 任意 | – | 接続する LDAP サーバーの bind ユーザーのパスワード |
LDAP_SEARCH_BASE | 任意 | – | LDAP ユーザー・グループ検索対象 DN |
LDAP_CREDENTIALS_ SEARCH_BASE | 任意 | LDAP_SEARCH_ BASE 値 | FIDO2 エントリー (ou=Credentials) の検索対象 DN |
LDAP_USER_SEARCH_BASE | 任意 | – | LDAP ユーザー検索対象 DN |
LDAP_USER_ SEARCH_FILTER | 任意 | – | LDAP ユーザー検索条件 |
LDAP_USER_ UNIQUE_ATTRIBUTE | 任意 | uid | LDAP ユーザーの一意な識別子 |
LDAP_GROUP_ SEARCH_BASE | 任意 | – | LDAP グループ検索対象 DN |
LDAP_GROUP_ SEARCH_FILTER | 任意 | – | LDAP グループ検索条件 |
LDAP_GROUP_ MEMBER_ATTRIBUTE | memberUid, member, uniqueMember | member | グループのメンバー属性 |
LDAP_GROUP_ UNIQUE_ATTRIBUTE | 任意 | cn | LDAP グループの一意な識別子 |
LDAP_EXCLUDE_ LOGGING_ATTRIBUTES | 任意 | – | 登録/更新リクエストのログ出力を除外する属性 カンマ(,)区切りで複数指定 |
- LDAP サーバーで管理している LDAP ユーザーエントリーのパスワード変更に関して API サーバーでは平文パスワードのハッシュ化は行いません。LDAP サーバーの設定で ppolicy_hash_cleartext を使ってハッシュ化してください
LDAP_CREDENTIALS_SEARCH_BASE
に所属する ou=Credentials から FIDO2 エントリーを検索しますLDAP_CREDENTIALS_SEARCH_BASE
を設定しない場合、LDAP_SEARCH_BASE
の値を使います
- 登録/更新リクエストのログ出力から userPassword と unicodePwd は必ず除外されます
SAML 認証
環境変数 | 値 | 規定値 | 説明 |
---|---|---|---|
SAML_SP_ENTITY_ID | 任意 | – | SAML SP の EntityID |
SAML_SP_ROOT_URL | 任意 | – | SAML SP の ROOT URL |
SAML_SP_IDP_METADATA_URL | 任意 | – | SAML IdP のメタデータの URL |
SAML_SP_IDP_METADATA_FILE | 任意 | – | SAML IdP のメタデータファイルのパス |
SAML_SP_TLS_SKIP_VERIFY_ FETCH_IDP_METADATA | 任意 | false | SAML IdP のメタデータ取得時に自己証明書を許可するかどうか |
SAML_SP_AUTH_TYPE | 任意 | ldap | SAML ログイン時に付与される認証タイプ |
SAML_SP_ROLE_NAME | 任意 | ldap-user | SAML ログイン時に付与されるデフォルトのロール名 |
SAML_SP_COOKIE_EXP_TIME | 任意 | 1h | SAML ログイン時に発行される cookie の有効期限 |
UCIDM の SAML 認証にて使用する証明書ファイルおよび鍵ファイルについては、compose.yml
ファイルの api の volumes 設定において、それぞれ /saml/ucidm_samlsp.crt
と /saml/ucidm_samlsp.key
のファイルに紐付けを行う必要があります。これらのファイルはコンテナで動作するアプリケーションにて参照されます。
SAML 認証の捕捉
SAML_SP_ENTITY_ID
の値を設定することで、SAML 認証が有効になります。
SAML_SP_ROOT_URL
の値を使って SAML 関連のエンドポイントが定義され、メタデータに反映されます。この値はユーザープロファイルのアクセスホスト名:ポート番号を使って、以下のように設定してください。
- <プロトコル>://<ユーザープロファイル画面の HOST >:< PORT >/ui/user/api/
SAML_SP_CERTIFICATE_FILE
および SAML_SP_KEY_FILE
にて SAML SP の証明書およびキーファイルのパスを設定します。
SAML IdP のメタデータを IdP からメタデータをダウンロードし、そのメタデータを配置したパスを SAML_SP_IDP_METADATA_FILE
にて設定してください。
API 起動時に SAML IdP のメタデータを指定した URL から 取得したい場合、SAML_SP_IDP_METADATA_URL
にその URL を設定します。(IdP にて自己証明書を使っている場合は、SAML_SP_TLS_SKIP_VERIFY_FETCH_IDP_METADATA
を true に設定する必要があります。)
SAML 認証時、認証されたユーザーに ldap 以外の認証タイプ、デフォルトで ldap-user 以外のロールを指定する場合は、SAML_SP_AUTH_TYPE
および SAML_SP_ROLE_NAME
の値を設定します。
SAML 認証 も合わせてご確認ください。