-
验证
- 概念
- 租户(tenant)
- openstack的组织方式
- 一个租户=一个nova的project-id
- 用户(user)
- 代表个体,openstack用user的形式授权
- 一个user=一个证书(credentials)
- 一个证书可分配给1~N个租户
- 验证后,每个tenant会分配有一个特定令牌
- 证书(credentials)
- 唯一标识一个keystone user的密码/其他信息
- 令牌(token)
- 任意比特的文本
- 两种类型
- scoped:代表某个tenant验证过的user
- unscoped:仅代表一个user
- 有效期有限,随时可被撤回
- 角色(role)
- 某个tenant的权限集合
- 租户(tenant)
- 概念
-
服务目录
- 服务(service)
- nova,glance,swift等
- 端点(endpoint)
- 一个uri
- 模板(template)
- 端点的集合
- 服务(service)
-
credential的处理和存储方式
- openstack的做法应该是 1.给每个公司分配一个userId,对应有一个证书 2.给每个用户建立多个项目,称为租户 3.证书可以分配给租户,但使用时的,是通过证书生成的令牌 4.令牌有期限,可撤换(类似oauth协议)
- 存储证书方式:
- keystone存储证书的方式,有多种选择, 从内置的sql 到 ldap - kvs - 内存型方式 - 最简单的backend,只需支持主键查询 - sql - 内置的是sqlite - 用SQLAlchemy持久存储 - pam - 使用OS提供的pam机制,以完成 - 授权 - user-tenant的一对一关系 - 需root权限 - ldap - 内置的是一个ldap的桩实现(FakeLdap)
backends/ --> sql.py --> Identity.authenticate(self, user_id, tenant_id, password): user_ref = self._get_user(user_id) 通过user_id获取user的信息 --> Identity._check_password(self, password, user_ref): return utils.check_password(password, user_ref.get('password')) 调用统一的password校验方法 --> utils.check_password (password, hashed): (common/utils.py) password_utf8 = password转为utf编码 return passlib.hash.sha512_crypt.verify(password_utf8, hashed) 调用独立的第三方库passlib中的方法
keystone backends/ --> 使用sql的处理方式 --> Identity.authenticate(self, user_id, tenant_id, password): 通过user_id获取user的信息 --> Identity._check_password(self, password, user_ref): 调用统一的password校验方法 --> utils.check_password (password, hashed): 调用独立的第三方库passlib中的方法,从中可以看出,password传入的是明文,存储的是sha512加密后的结果 passlib.hash.sha512_crypt.verify(password_utf8, hashed)