、密码恢复流程、双因素认证(2FA)等。
通过 RPM 安装非常简单:
shrpm -Uvh keystone-spassword-*.noarch.rpm
安装后可微调配置选项(默认配置位于 /etc/keystone/keystone.conf):
[spassword] enabled = true pwd_exp_days = 365 pwd_max_tries = 5 pwd_block_minutes = 30 pwd_user_blacklist = user_id_list smtp_server = '0.0.0.0' smtp_port = 587 smtp_tls = true smtp_user = '***' smtp_password = 'yourpassword' smtp_from = 'smtpuser'
enabled:布尔值,启用(true)或禁用(false)Keystone SPASSWORD 插件功能。pwd_exp_days:密码过期时间(天),若用户未在此期限前更改密码则密码过期。pwd_max_tries:登录尝试失败的最大次数,超过后账户将被锁定。pwd_block_minutes:账户锁定时间(分钟)。pwd_user_blacklist:以逗号分隔的用户 ID 列表,这些用户不受 SPASSWORD 限制。keystone-spassword 启用了两个新的认证和身份插件,扩展了默认插件以确保强密码使用、检查过期时间及控制登录失败尝试次数。此外,它扩展了 Keystone 通过 "POST /v3/auth/tokens" 返回给用户的令牌数据,在令牌的 'extra' 字典中包含新字段:
json"extras": { "password_creation_time": "2016-12-01T08:55:34Z", "pwd_user_in_blacklist": false, "password_expiration_time": "2017-12-01T08:55:34Z", "last_login_attempt_time": "2017-05-01T06:45:00Z" }
需在配置中设置认证和身份插件:
[auth] password=keystone_spassword.contrib.spassword.SPassword
及
[identity] driver=keystone_spassword.contrib.spassword.backends.sql.Identity
添加过滤器配置:
[filter:spassword_checker] paste.filter_factory = keystone_spassword.contrib.spassword.routers:PasswordExtension.factory [filter:spassword_time] paste.filter_factory = keystone_spassword.contrib.spassword:PasswordMiddleware.factory
重启 Keystone 服务:
shsudo service openstack-keystone restart
将插件的 TGZ 文件解压到 Python site-packages 目录,从 Keystone 的 contrib 目录创建软链接指向该目录。详细步骤参见 [RPM 规范步骤]./keystone-spassword.spec)。
完整的 Keystone 开发环境安装指南:
[***]
提供包含 Keystone + keystone scim 插件 + keystone spassword 插件的 Docker 容器镜像: [***]
配置相关的[环境变量
如何升级到最新(1.18.0)Docker 版本: 升级到 1.18.0 版本前,需先升级到 1.17.0 版本。根据起始版本,可能需要执行特定步骤。
常规升级流程:停止容器,更新 docker-compose 中的版本,重新启动容器;容器将被重建。但如果起始版本在 1.4.X 至 1.6.X 之间,则需执行额外步骤。无论如何,确保备份 MySQL Keystone 数据库:
shmysqldump -u root -p keystone > keystone_backup.sql
并在迁移的每个步骤中检查 Keystone 是否正常工作(如能否认证)。
另一种备份 Keystone 数据库的方法:
shecho "create database new_keystone" | mysql -u root -p mysqldump -u root --password=<密码> keystone | mysql -u root -p new_keystone
需先升级到 1.5.4 版本,再执行该版本的升级步骤。此步骤中,重要的是使用 Keystone 创建的 SQL 架构,而非仅从 SQL 转储备份恢复,因为 SQL 转储备份可能缺少 1.4.x 到 1.5.x 迁移所需的所有数据。更多信息见 [***]
需执行以下操作:
在更新 docker-compose 中的镜像前,备份 keystone.spassword 表:
shmysqldump -u root -p keystone spassword > table_spassword.sql
执行以下命令:
shmysql -h iot-mysql -u root -p use keystone; drop table spassword; delete from migrate_version where repository_id='keystone_spassword';
然后停止容器,更新 docker-compose 中的镜像版本并重启容器。检查 Keystone 正常工作后,可选择恢复 spassword 表:
shmysql -u root -p keystone < table_spassword.sql
再次重启 Keystone 容器。
无需额外操作。
无需额外操作。
无需额外操作。升级到 1.19.1 版本前需先升级到 1.18.1 版本。
自 1.21.0 版本起,Keystone SPASSWORD 支持从 MySQL 迁移到 PostgreSQL。
MySQL 8 的默认认证插件为 caching_sha2_password,不被迁移工具 pgloader 支持。需在 [mysqld] 部分添加:
default-authentication-plugin=mysql_native_password
重启 MySQL 服务器后执行:
ALTER USER 'youruser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourpassword';
shPGPASSWORD=postgresUser psql -h 172.17.0.1 -p 5432 -U postgresPass <<EOF CREATE DATABASE keystoneDb; CREATE USER keystoneUser WITH PASSWORD 'keystonePass'; GRANT ALL PRIVILEGES ON DATABASE keystoneDb TO keystoneUser; ALTER DATABASE keystoneDb OWNER TO keystoneUser; EOF
shpgloader mysql://keystoneUser:keystonePass@172.17.0.1:3306/keystoneDb postgresql://keystoneUser:keystonePass@172.17.0.1:5432/keystoneDb
shdocker restart keystone
SPASSWORD 扩展复用 Keystone 提供的认证和授权机制。本文档假设读者已具备 Keystone 使用经验,更多关于 Keystone 认证授权机制的信息参见***文档。
此外,keystone-spassword 新增了处理双因素认证的 API,以及以下新 API:
GET '/v3/users/{user_id}/project_roles'
需使用与 <user_id> 用户关联的 x-auth-token。返回示例:
json[ { "domain": "8960989b51164eaeaa42200ecc79a47a", "project_name": "/smartcity/gardens", "project": "031149af6c5147a782e9cf4c56e1fe11", "role_name": "8960989b51164eaeaa42200ecc79a47a#SubServiceAdmin", "role": "e0da2d91e8154a32980ed4c5a717fd91", "user": "bace4fd6bd9b49fda5727eb83a714a3c", "user_name": "user1" }, .... ]
获取用户密码过期黑名单成员资格:
GET '/v3/users/<user_id>/black'
需使用与 <user_id> 用户关联的 x-auth-token。返回 JSON 指示用户是否在黑名单中({"black": true} 或 {"black": false}),并包含当前用户的密码过期时间(如 {"pwd_expiration_time": "2035-02-11T09:29:28.000000"})。
修改用户密码过期黑名单成员资格(启用/禁用):
POST '/v3/users/<user_id>/black'
需使用与 <user_id> 用户关联的 x-auth-token。请求体为 {"enable":true}(启用)或 {"enable":false}(禁用)。
初始化密码重置流程:
GET '/v3/users/<user_id>/recover_password'
无需与 <user_id> 用户关联的 x-auth-token。若用户有有效的已验证***,重置密码的链接将发送至该***。用户点击链接后,密码将重置并通过邮件发送给用户。
完成密码重置流程:
GET '/v3/users/<user_id>/reset_password/'
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名