说明:
- 基于Keystone Queens版本
支持情况
OpenStack Keystone在v3版本的API中支持了多因子认证特性,当前已经实现的认证插件有:
- external
- password
- token
- oauth1
- mapped
- application_credential
- totp
其中totp插件默认没有开启。
如何使用多因子认证功能?
对于Keystone默认启用了的认证插件,只需要在调用Keystone的认证接口中传入指定格式的数据,服务端会自动解析并进行认证。
通常,数据格式如下:
1 | { |
identity
是所有认证相关的数据,methods
中指定了认证插件有哪些,各认证插件有自己的认证数据/格式。Keystone服务解析数据并依次认证,必须所有插件都认证成功才为用户颁发token。
如何添加新的认证插件?
Keystone认证插件的扩展性很好,所有认证插件必须继承自class keystone.auth.plugins.base.AuthMethodHandler
并实现各自的authenticate
方法。新的插件名称要添加到keystone配置文件的auth
组下的methods
配置项中,以便Keystone服务在启动时加载该插件。
authenticate
方法有如下参数:
- context - keystone’s request context
- auth_payload - the content of the authentication for a given method
- auth_context - user authentication context, a dictionary shared by all plugins. It contains method_names and extras by default
认证成功后,auth_context
中要提供有效的user_id
参数,认证失败,必须抛出keystone.exception.Unauthorized
的异常。