首批通过分布式安全可靠测评,为关键业务系统打造
OMS 社区版接入 OIDC 协议实现单点登录
更新时间:2026-04-14 15:36:11
OceanBase 迁移服务(OceanBase Migration Service,OMS)社区版适配标准 OAuth2 认证中心,需要支持 OIDC 协议。目前仅支持授权码(authorization-code)模式。本文为您介绍接入 OIDC 协议需要更新的配置,以实现单点登录 SSO 能力。
获取认证中心配置
您需要在 SSO 服务中添加应用,获取对应的应用标识和应用密钥,以及其它 OIDC 需要的配置。
| 参数 | 描述 |
|---|---|
| clientId | 应用标识。 |
| clientSecret | 应用密钥。 |
| scope | 权限标识,使用英文逗号(,)分隔,且必须包含 openid。例如,openid,profile。 |
| ClientAuthenticationMethod | 认证方式,目前支持 client_secret_basic(推荐使用)和 basic。 |
| jwk_set_uri | 用于 JWK 的解码。 |
| authorization_uri | 授权 endpoint。 |
| token_uri | 获取凭证 endpoint。 |
配置回调地址
如果 SSO 系统有登录回调地址的白名单,您需要配置白名单。
登录回调地址配置为:http://{serverDomain}/login/oauth2/code/oms,其中 serverDomain 是您部署 OMS 社区版的域名。
部署 OMS 社区版
本文以单节点部署为例,为您介绍如何实现单点登录方式登录 OMS 社区版。如果您需要进行单地域多节点或多地域多节点部署,请参见 单地域多节点部署 中《部署流程(有配置文件)》模块的内容。
前提条件
确认安装环境符合系统和网络要求,详情请参见 系统和网络要求。
已准备 MetaDB 集群作为 OMS 社区版的元信息库。
已获取 OMS 社区版安装包,通常安装包为以 oms 开头的
tar.gz文件。已加载下载的 OMS 社区版安装包至 Docker 容器的本地镜像仓库。
docker load -i <OMS 社区版安装包>已准备一个 OMS 社区版容器挂载目录,OMS 社区版会在该目录下创建三个映射目录:
/home/admin/logs、/home/ds/store和/home/ds/run,用于存放 OMS 社区版运行时的组件和日志信息。(可选)已准备时序数据库为 OMS 社区版存储性能监控和 DDL/DML 统计数据信息。
操作步骤
登录 OMS 社区版部署服务器。
(可选)部署时序数据库。
如果您需要 OMS 社区版能够收集和展示监控数据,请部署时序数据库。如果无需展示监控数据,请跳过本步骤。操作详情请参见 部署时序数据库。
执行下述命令,从加载的镜像中获取部署脚本
docker_remote_deploy.sh。sudo docker run -d --net host --name oms-config-tool <OMS_IMAGE> bash && sudo docker cp oms-config-tool:/root/docker_remote_deploy.sh . && sudo docker rm -f oms-config-tool示例如下:
sudo docker run -d --net host --name oms-config-tool work.oceanbase-dev.com/obartifact-store/oms:feature_3.4.0 bash && sudo docker cp oms-config-tool:/root/docker_remote_deploy.sh . && sudo docker rm -f oms-config-tool通过部署脚本启动部署工具。
bash docker_remote_deploy.sh -o <OMS 社区版容器挂载目录> -c <已有 config.yaml 配置文件地址> -i <本机 IP 地址> -d <OMS_IMAGE>此时,OMS 社区版部署工具会自动校验 CPU、Memory 和 Disk 三项配置的资源。其中任意一项资源不达标,则提示对应资源不足,影响数据迁移速度。
根据工具提示完成部署,每次输入后,通过回车进入下一步。
请选择部署模式。
此处请选择 单地域单节点 选项。
请选择您所需要进行的任务。
此处请选择 已通过脚本 [-c] 选项传入参考配置文件,基于参考配置文件开始配置。
如果出现 元数据库中对应数据库名已存在!这样可以吗? 提示,说明原配置文件的 MetaDB 中已存在您输入的数据库名称。该情况可能是由于重复部署或执行 OMS 社区版升级导致,请您自行确认后,输入 y 继续部署,或输入 n 重新输入配置信息。
如果配置文件检查通过,会为您展示所有的配置信息。如果确认无误,请输入 n。如果需要修改,请输入 y。
如果配置文件未检查通过,请根据提示修改配置信息。
请输入节点 <节点 IP> 上预备部署 OMS 社区版容器的挂载目录:
请输入一个有较大容量的目录作为 OMS 社区版容器的挂载目录。
请确认部署 OMS 社区版的镜像名为 <OMS_IMAGE> 是否可以。
如果确认无误,请输入 y。如果需要修改,请输入 n。
请确认是否需要在 OMS 社区版容器中挂载 HTTPS 证书。
如果需要,请输入 y,并根据提示输入 https_key、https_crt 目录。如果不需要,请输入 n。
开始执行部署。
执行部署过程中,您可以执行命令
docker logs -f <OMS 社区版容器名>查看初始化执行情况。如果您需要查看所有启动初始化日志,可以执行命令
docker logs <OMS 社区版容器名>。如果部署失败,您可以登录至运行的 OMS 容器中,查看
/home/admin/logs目录下以docker_init为前缀的.log文件,获取日志信息。如果 OMS 容器未成功启动,则无法获取日志。
部署完成后,如果您需要修改配置,请进行以下操作:
登录至运行的 OMS 社区版容器。
根据业务需求,修改
/home/admin/conf/config.yaml文件。进入
/root目录,执行命令python -m omsflow.scripts.units.oms_init_manager --init-config-file。执行命令
supervisorctl restart oms_console oms_drc_supervisor。
配置文件的模板和示例
配置文件模板
注意
模板中的必填参数需要替换为您部署的目标环境的实际值。本文已将可选参数进行注释,您可以根据实际情况选择性修改。
config.yaml文件中的 Key: Value,冒号后面必须加一个空格。
# OMS 社区版元数据库信息
oms_meta_host: ${oms_meta_host}
oms_meta_port: ${oms_meta_port}
oms_meta_user: ${oms_meta_user}
oms_meta_password: ${oms_meta_password}
# 用户可以自定义以下三个数据库的名称,OMS 社区版部署时会在元信息库中创建出这三个数据库
drc_rm_db: ${drc_rm_db}
drc_cm_db: ${drc_cm_db}
drc_cm_heartbeat_db: ${drc_cm_heartbeat_db}
# OMS 社区版集群配置
# 单节点部署时,通常配置为当前 OMS 社区版机器 IP(建议使用内网 IP)
cm_url: ${cm_url}
cm_location: ${cm_location}
# 单节点部署时,无需设置 cm_region
# cm_region: ${cm_region}
# 单节点部署时,无需设置 cm_region_cn
# cm_region_cn: ${cm_region_cn}
cm_is_default: true
cm_nodes:
- ${cm_nodes}
# 时序数据库配置
# 默认值为 false。如果您需要开启指标汇报功能,请设置为 true
# tsdb_enabled: false
# 当 tsdb_enabled 为 true 时,请取消下述参数的注释并根据实际情况填写
# tsdb_service: 'INFLUXDB'
# tsdb_url: '${tsdb_url}'
# tsdb_username: ${tsdb_user}
# tsdb_password: ${tsdb_password}
# 下述参数为使用单点登录 SSO 的方式登录 OMS 社区版需要新增的参数
oms_iam_auth: OAUTH2
oms_oauth2_user_account_name_field: nickname
oms_oauth2_sso_login_url: http://oms.example.org:8090/omsp/oauth2/authorization/oms?oms_back_url=http://oms.example.org:8089
spring_security_oauth2_client_registration_oms_client_id: xxx
spring_security_oauth2_client_registration_oms_client_secret: xxx
spring_security_oauth2_client_registration_oms_redirect_uri: http://oms.example.org:8090/omsp/login/oauth2/code/{registrationId}
spring_security_oauth2_client_registration_oms_authorization_grant_type: authorization_code
spring_security_oauth2_client_registration_oms_scope: openid,profile
spring_security_oauth2_client_registration_oms_clientAuthenticationMethod: client_secret_basic
spring_security_oauth2_client_registration_oms_provider: oms
spring_security_oauth2_client_provider_jwk_set_uri: https:xxx.com
spring_security_oauth2_client_provider_authorization_uri: https://xxxx/api/auth
spring_security_oauth2_client_provider_token_uri: https://xxx/api/token
配置参数说明
| 参数 | 描述 | 是否必选 |
|---|---|---|
| oms_meta_host | 元信息库的 IP 地址,可以是 MySQL 或 OceanBase 数据库 MySQL 兼容模式。 注意: OceanBase 数据库需要是 V2.0 及之后版本。 |
必选 |
| oms_meta_port | 元信息库的端口号。 | 必选 |
| oms_meta_user | 元信息库的用户名称。 | 必选 |
| oms_meta_password | 元信息库的用户密码。
注意元信息库的用户密码不能为空,并且不支持特殊字符(包括换行、空格,以及 |"'`()=;/&[]{})。 |
必选 |
| drc_rm_db | 管理控制台的数据库名称。 | 必选 |
| drc_cm_db | 集群管理服务的元数据库名称。 | 必选 |
| drc_cm_heartbeat_db | 集群管理服务的心跳库的名称。 | 必选 |
| cm_url | OMS 社区版集群管理服务的地址。例如,http://xxx.xxx.xxx.xxx:8088。 说明: 单节点部署时,通常配置为当前 OMS 社区版机器 IP。不建议您使用 http://127.0.0.1:8088。 OMS 控制台的访问地址为: 部署 OMS 的宿主机的 IP 地址:8089。例如,http(https)://xxx.xxx.xxx.xxx:8089。 8088 是负责调度的程序端口,8089 是网页地址的端口,此处必须使用 8088 端口。 |
必选 |
| cm_location | 地域码,取值范围为 [0,127]。每个地域一个数字,用户自行选择。 | 必选 |
| cm_region | 地域,例如 cn-jiangsu。 注意: 如果是和阿里云 MSHA 产品在容灾双活场景下使用,请使用阿里云的 Region 信息作为 cm_region。 |
可选 |
| cm_region_cn | 地域的中文标识。例如,江苏。 | 可选 |
| cm_nodes | OMS 社区版集群管理服务的机器 IP 列表。 | 必选 |
| cm_is_default | 标识是否默认 OMS 社区版集群管理服务。 | 可选,默认值为 true |
| tsdb_enabled | 表示是否开启指标汇报的功能(监控能力),包括 true 或 false。 |
可选,默认值为 false |
| tsdb_service | 表示时序数据库的类型,包括 INFLUXDB 和 CERESDB。 |
可选,默认值为 INFLUXDB |
| tsdb_url | 部署 InfluxDB 的机器地址。当 tsdb_enabled 为 true 时,请根据实际环境修改该参数。 |
可选 |
| tsdb_username | 时序数据库的用户名。当 tsdb_enabled 为 true 时,请根据实际环境修改该参数。 部署时序数据库后,需要您手动创建时序数据库用户,并填写用户名和密码。 |
可选 |
| tsdb_password | 时序数据库的密码。当 tsdb_enabled 为 true 时,请根据实际环境修改该参数。 |
可选 |
| oms_iam_auth | 登录方式,支持 OAUTH2 和 LOCAL。OAUTH2 可以同时兼容密码模式。 | 必选 |
| oms_oauth2_user_account_name_field | 从 IdToken 中获取用户名称的字段。例如,nick 或者 nickname。 | 必选 |
| oms_oauth2_sso_login_url | 接入 OIDC 协议进行单点登录重定向的 URL,格式为 http://{cm_url}/omsp/oauth2/authorization/oms?oms_back_url={serverDomain}。其中 {serverDomain} 为用户域名,oms_back_url 为登录成功后的前端页面。 |
必选 |
| spring_security_oauth2_client_registration_oms_client_id | 应用标识 clientId。 | 必选 |
| spring_security_oauth2_client_registration_oms_client_secret | 应用密钥 clientSecret。 | 必选 |
| spring_security_oauth2_client_registration_oms_redirect_uri | 即《配置回调地址》步骤中配置的 redirectUrl,格式为 http://{serverDomain}/omsp/login/oauth2/code/{registrationId}。其中 {serverDomain} 为用户域名,{registrationId} 无需填充。 |
必选 |
| spring_security_oauth2_client_registration_oms_authorization_grant_type | OMS 社区版与 OAuth2 授权服务器交互时使用的授权类型,目前仅支持 authorization_code 模式。 |
必选 |
| spring_security_oauth2_client_registration_oms_scope | 权限标识,使用英文逗号(,)分隔,且必须包含 openid。 |
必选 |
| spring_security_oauth2_client_registration_oms_provider | 授权服务提供者名称,您可以自定义。例如,oidc。 | 必选 |
| spring_security_oauth2_client_provider_jwk_set_uri | 用于 JWK 的解码。 | 必选 |
| spring_security_oauth2_client_provider_authorization_uri | 授权 endpoint。 |
必选 |
| spring_security_oauth2_client_provider_token_uri | 获取凭证 endpoint。 |
必选 |
配置文件示例
请根据您部署的目标环境替换参数的实际值。
oms_meta_host: xxx.xxx.xxx.xxx
oms_meta_port: 2883
oms_meta_user: oms_meta_user
oms_meta_password: ***********
drc_rm_db: oms_rm
drc_cm_db: oms_cm
drc_cm_heartbeat_db: oms_cm_heartbeat
cm_url: http://xxx.xxx.xxx.xxx:8088
cm_location: 100
cm_region: cn-anhui
cm_region_cn: 安徽
cm_is_default: true
cm_nodes:
- xxx.xxx.xxx.xxx
tsdb_service: 'INFLUXDB'
tsdb_enabled: true
tsdb_url: 'xxx.xxx.xxx.xxx:8086'
tsdb_username: username
tsdb_password: *************
oms_iam_auth: OAUTH2
oms_oauth2_user_account_name_field: nickname
oms_oauth2_sso_login_url: http://oms.example/org:8090/omsp/oauth2/authorization/oms?oms_back_url=http://oms.example.org:8090
spring_security_oauth2_client_registration_oms_client_id: xxx
spring_security_oauth2_client_registration_oms_client_secret: xxx
spring_security_oauth2_client_registration_oms_redirect_uri: http://oms.example.org:8090/omsp/login/oauth2/code/{registrationId}
spring_security_oauth2_client_registration_oms_authorization_grant_type: authorization_code
spring_security_oauth2_client_registration_oms_scope: openid,profile
spring_security_oauth2_client_registration_oms_clientAuthenticationMethod: client_secret_basic
spring_security_oauth2_client_registration_oms_provider: oms
spring_security_oauth2_client_provider_jwk_set_uri: https:xxx.com
spring_security_oauth2_client_provider_authorization_uri: https://xxxx/api/auth
spring_security_oauth2_client_provider_token_uri: https://xxx/api/token