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_PORT18080接続を受け付けるポート番号
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_TEMPLATEGROUP_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任意512RabbitMQ Procuder の最大セッション数

メールサーバー

環境変数規定値説明
SMTP_HOST任意SMTP サーバーのホスト名
SMTP_PORT任意465SMTP サーバーのポート番号
SMTP_AUTH_USERNAME任意SMTP サーバーの認証で使用するユーザー名
SMTP_AUTH_PASSWORD任意SMTP サーバーの認証で使用するパスワード
SMTP_AUTH_METHODPLAIN,
XOAUTH2,
CRAM-MD5,
NOAUTH
PLAINSMTP サーバーの認証方法
SMTP_USE_TLStrue または falsetrueSMTP サーバーの TLS の有効/無効
SMTP_USE_STARTTLStrue または falsefalseSMTP サーバーの STARTTLS の有効/無効
SMTP_SECURE_SKIPtrue または falsefalseSMTP サーバーの 任意の証明書を許可

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
任意mailパスワードリセット時に使用する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_SCHEMEldap または ldapsldap接続する LDAP サーバーのプロトコル
LDAP_HOSTS任意接続する LDAP サーバーのホスト名
カンマ(,)区切りで複数指定
LDAP_PORT任意接続する LDAP サーバーのポート番号
LDAP_SECURE_SKIPtrue または falsefalse接続する 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
任意uidLDAP ユーザーの一意な識別子
LDAP_GROUP_
SEARCH_BASE
任意LDAP グループ検索対象 DN
LDAP_GROUP_
SEARCH_FILTER
任意LDAP グループ検索条件
LDAP_GROUP_
MEMBER_ATTRIBUTE
memberUid,
member,
uniqueMember
memberグループのメンバー属性
LDAP_GROUP_
UNIQUE_ATTRIBUTE
任意cnLDAP グループの一意な識別子
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
任意falseSAML IdP のメタデータ取得時に自己証明書を許可するかどうか
SAML_SP_AUTH_TYPE任意ldapSAML ログイン時に付与される認証タイプ
SAML_SP_ROLE_NAME任意ldap-userSAML ログイン時に付与されるデフォルトのロール名
SAML_SP_COOKIE_EXP_TIME任意1hSAML ログイン時に発行される 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 認証 も合わせてご確認ください。