keystone.identity.core 模块

身份服务的主要入口点。

class keystone.identity.core.DomainConfigs[source]

基类: ProviderAPIMixin, dict

发现、存储并提供对特定域配置的访问。

通过第一次调用此管理器处理的驱动程序函数,将调用 setup_domain_drivers()。

特定于域的配置仅受身份后端支持,并且根据 ‘domain_configurations_from_database’ 配置选项的设置,这些配置要么在资源数据库中指定,要么在各个域配置文件中指定。

结果是,对于具有特定配置的每个域,此类将保存一个 ConfigOpts 和驱动程序对象的引用,该对象可供身份管理器和驱动程序使用。

check_config_and_reload_domain_driver_if_required(domain_id)[source]

检查并加载此域的任何新的特定域配置。

这仅支持数据库存储的特定域配置。

在设置特定于域的驱动程序时,我们存储了当时可用的此域的特定配置。因此,我们现在读取当前版本并进行比较。虽然这可能看起来效率不高,但敏感配置调用已缓存,因此应该轻量级。更重要的是,当达到缓存超时时,我们将获得从任何其他 keystone 进程更新的任何配置。

此缓存超时方法适用于多进程和多线程 keystone 配置。在多线程配置中,即使我们可能删除一个驱动程序对象(可能被另一个线程使用),在所有引用都被破坏之前,它实际上不会被丢弃。当另一个线程被释放并使用另一个命令重新启动时,下次它访问驱动程序时将获取新的驱动程序。

configured = False
driver = None
get_domain_conf(domain_id)[source]
get_domain_driver(domain_id)[source]
lock = <unlocked _thread.lock object>
reload_domain_driver(domain_id)[source]
setup_domain_drivers(standard_driver, resource_api)[source]
class keystone.identity.core.Manager[source]

继承自: Manager

身份后端默认的枢纽点。

有关此动态调用后端的更多详细信息,请参阅 keystone.common.manager.Manager

此类还处理对特定域后端的支持,通过使用 DomainConfigs 类。DomainConfigs 的设置调用从 @domains_configured 包装器中的延迟加载方式调用,以解决我们在 __init__() 函数中无法满足其需要的分配 API 的事实,因为分配驱动程序本身尚未初始化。

每个身份调用在此处进行预处理,以根据域选择应调用哪个驱动程序。非特定于域的驱动程序仍然存在,并且在没有特定于域的驱动程序(或我们不使用多个域驱动程序)的情况下使用。

从 Juno 开始,为了能够仅从作为 API 调用的一部分呈现的 ID 中获取域,维护了一个公共 ID 到域和本地 ID 的映射。此映射还允许通过公共 ID 引用不提供简单 UUID 的驱动程序(例如 LDAP)的本地 ID。该映射本身会在通过驱动程序访问实体时自动生成。

仅当满足以下条件时才使用此映射:- 实体由默认驱动程序以外的任何内容处理,或者 - 实体由默认 LDAP 驱动程序处理并且不需要向后兼容的 ID。

这意味着在单个 SQL 后端或单个 LDAP 后端的默认设置(因为默认情况下已设置向后兼容的 ID 为 True)的标准情况下,不使用映射。另一种方法是始终使用映射表,但在我们不需要它使公共 ID 和本地 ID 相同的情况下。认为默认情况下不使用映射是引入此功能的更谨慎方法。

add_user_to_group(user_id, group_id, initiator=None)[source]
assert_user_enabled(user_id, user=None)[source]

断言用户及其域已启用。

:raise AssertionError 如果用户或用户的域已禁用。

authenticate(user_id, password)[source]
change_password(user_id, original_password, new_password, initiator=None)[source]
check_user_in_group(user_id, group_id)[source]
create_group(group_ref, initiator=None)[source]
create_user(user_ref, initiator=None)[source]
delete_group(group_id, initiator=None)[source]
delete_user(user_id, initiator=None)[source]
driver_namespace: str = 'keystone.identity'
get_group(group_id)[source]
get_group_by_name(group_name, domain_id)[source]
get_user(user_id)[source]
get_user_by_name(user_name, domain_id)[source]
list_groups(domain_scope=None, hints=None)[source]
list_groups_for_user(user_id, hints=None)[source]
list_users(domain_scope=None, hints=None)[source]
list_users_in_group(group_id, hints=None)[source]
remove_user_from_group(user_id, group_id, initiator=None)[source]
shadow_federated_user(idp_id, protocol_id, user, group_ids=None)[source]

将联合用户映射到用户。

参数:
  • idp_id – 身份提供者 ID

  • protocol_id – 协议 ID

  • user – 用户字典

  • group_ids – 要将用户添加到的组 ID 列表

返回值:

映射的用户实体的字典

update_group(group_id, group, initiator=None)[source]
update_user(user_id, user_ref, initiator=None)[source]
class keystone.identity.core.MappingManager[source]

继承自: Manager

ID 映射后端的默认枢纽点。

create_id_mapping(local_entity, public_id=None)[source]
delete_id_mapping(public_id)[source]
driver_namespace: str = 'keystone.identity.id_mapping'
get_id_mapping(public_id)[source]
get_public_id(local_entity)[source]
purge_mappings(purge_filter)[source]
class keystone.identity.core.ShadowUsersManager[source]

继承自: Manager

Shadow Users 后端的默认枢纽点。

driver_namespace: str = 'keystone.identity.shadow_users'
keystone.identity.core.domains_configured(f)[source]

包装 API 调用以延迟加载域配置,以便在初始化后进行加载。

这是必需的,因为分配管理器需要在初始化之前进行初始化,但此管理器的初始化希望能够进行分配调用(以构建域配置)。因此,我们检查在每次调用条目时是否已初始化域,如果需要则加载它们。

keystone.identity.core.exception_translated(exception_type)[source]

包装 API 调用以映射到正确的异常。

keystone.identity.core.get_driver(namespace, driver_name, *args)[source]

获取不进行初始化的身份驱动程序。

调用该方法是为了能够内省特定于域的驱动程序,以查找驱动程序所需的其他配置选项。