如何通过openstacksdk实现OpenStack当前登录用户密码修改
问题原因
你使用的update_user方法对应Keystone的PATCH /v3/users/{user_id}用户更新接口,该接口仅支持管理员无需原始密码修改任意用户密码的场景,和你需要调用的POST /v3/users/{user_id}/password普通用户改密接口不是同一个,因此update_user自然不支持original_password参数。同时你的示例代码还存在password拼写错误的问题。
正确实现代码
openstacksdk已经内置了对应用户改密接口的方法,直接调用即可:
import openstack # 初始化OpenStack连接 conn = openstack.connect( region_name = 'RegionOne', auth_url = 'http://10.32.17.172:35357/v3', domain_name = 'Default', project_name = 'admin', username = 'admin', password = '123' # 当前使用的原始密码 ) # 获取当前登录用户对象,也可以直接传入指定的用户ID current_user = conn.identity.get_user(conn.current_user_id) # 调用改密接口 conn.identity.change_password( user=current_user, original_password='123', # 原始密码 new_password='aaa' # 要设置的新密码 )
补充说明
如果是管理员账号修改其他用户的密码,不需要提供原始密码,可以直接用你之前找到的update_user方法实现:
# 管理员修改其他用户密码示例 target_user = conn.identity.get_user("目标用户的ID") conn.identity.update_user( target_user, password="新的密码" )
内容的提问来源于stack exchange,提问作者Victor Lee
相关产品推荐
相关产品推荐

