Keystone身份API简介
Keystone提供REST风格的API, 客户端可以通过HTTP方法和URL操作资源. Keystone有两个主要版本的API, 以及构建在这些核心API上的一些API扩展. 这两个主要版本的API分别是第二版身份API和第三版身份API. 查阅所有的Keystone身份API, 请移步这里.
之所以没有"第一版"身份API是因为1.x系列的API是Rackspace公司为自己的公有云产品开发的简单原型, 这一系列的身份API早于OpenStack项目推出, 在Keystone中已经看不到它们了. 随着OpenStack的出现, Keystone逐渐成为Rackspace的公有云, Nova, Swift等产品中已实现的身份认证和多租户授权模型的超集, 2.0版的身份API也就由此诞生.
OpenStack官方推荐使用第三版身份API, 第三版身份API是第二版身份API功能的超集, 提供了更为一致的开发者体验, Keystone社区正在逐渐弃用并将会最终减少(乃至放弃)对第二版身份API的支持. 此外, 第三版身份API引入了"域"(Domain)的概念. 域作为高级容器担当用户, 项目(Projects)等实体的命名空间, 使得身份管理变得更加灵活, 也改进了第二版身份API中不记名令牌(Bearer Token)出现在URL中的安全隐患.
第三版与第二版身份API的显著区别包括:
- 第二版身份API中的"租户"(tenant)现在改称"项目"(project).
- 身份认证方法 (password, token等) 如今需要明确指明.
- 用户和项目的命名空间是他们所属的域(默认id = "default"), 这个id为“default”的域在Keystone中默认存在, 成为所有第二版身份API的命名空间(由于那时没有引入"域"的概念). 你也可以引用不在这个默认的域的命名空间中的用户和项目, 但是这些功能是第二版身份API所不支持的.
- 在第三版的身份API中, 令牌作为响应头的X-Subject-Token字段由Keystone服务返还给你, 而不是存放于响应体中. 当你需要向其他的服务证明自己的身份时, 仍然将你获得的令牌放置在请求头的X-Auth-Token字段.
如何使用第三版身份API?
一. 在Keystone服务上部署
为了使用第三版的身份API, 先要配置Keystone服务端向外开放必要的接口.
由于最新的Keystone已经实现并继续开发第三版身份API, 我们只需要在Paste部署配置中进行简单的配置即可. Keystone自带的Paste配置模板是keystone/etc/keystone-paste.ini, 我们这里以这个文件为例, 其中包括了第三版身份API的Paste应用和管道.
[app:service_v3]
paste.app_factory = keystone.service:v3_app_factory
[pipeline:api_v3] pipeline = ... service_v3
[composite:main] use = egg:Paste#urlmap /v2.0 = public_api /v3 = api_v3 ... [composite:admin] use = egg:Paste#urlmap /v2.0 = admin_api /v3 = api_v3 ...
这些Paste配置信息提供在模板keystone-paste.ini文件中, 说明Keystone默认配置为同时支持第二版和第三版的身份API.