Keystone token的scope
为什么需要 token scope
token 是用来传递用户的认证信息的,用户认证信息的一个关键是的角色。在 openstack 中用户的角色往往不止一个、用户可能在不同的 project 中,所以 scope-token 就显得十分必要。在这种机制下,openstack 给 token 加上了 scope。例如,某一个project scope 的 token 不能被重用于其他 project。
Unscoped tokens
一种特殊的 token ,不包含 service catalog、roles、authorization scope(project、domain、system属性)。你可以使用它向 keystone 证明你的身份,以此来换取 scoped-tokens。这就是最主要的用法了。
必须满足如下条件,keystone 才会返回 unscoped token:
- 在认证请求中没有指定任何 authorization scope(例如:在命令中未包含--os-project-name或--os-domain-id)
- 没有在 default下
获得一个unscoped token:
| 1 |  | 
以 token 换取 token(如上所述一般用unscope token 换取 scope token):
| 1 |  | 
Project-scoped tokens
project 是资源的容器(例如,instance、volume)。Project-scoped tokens 包含了 service catalog、roles、project info 等信息,Project-scoped tokens 表示授权被限定在特定租户中。大部分终端用户需要将 role assignment 到 project 下以此来消费租户中的资源。
获取一个 project-scoped token:
| 1 |  | 
Domain-scoped tokens
Domain 是 projects、users、groups的命名空间。Domain-scoped tokens 用来代表操作 domain 下资源时的权限。尽管其他的组件很少涉及到 domain 的概念,但是 keystone 组件是运用 domain 概念最多的地方,因为 user 管理、 project 管理功能都是在 keystone 去实现的,而 user 、 project 等资源都属于 domain ,因此为了权限控制,Domain-scoped tokens 常常用在 keystone 中。例如: domain 管理员能够在该 domain 中创建新 user 、创建新 project 。 Domain-scoped tokens 包含了 service catalog、roles、domain info等信息。
获取一个 domain-scoped token:
| 1 |  | 
说明
- 1.获取token接口的返回信息没有列出,可参考官方api文档。对于不同的 scope 返回的结果,token中包含的信息也是不同的。 
- 2.返回的 header 中,X-Subject-Token 就是token的 ID,请求其他服务时,使用的也是这个值。 
Token的用处
- 用 REST API方式请求其他服务,在请求头带上X-Auth-Token:Token_ID
- 验证 token的有效性,获得token中的信息(domain、project、role、endpoint)
- 换取其他的 token(一般为不同的scope)
- 吊销 token