Keystone是OpenStack中负责管理身份验证、服务规则和服务令牌功能的模块。
如果用户每次在访问服务的过程中,都需要提供用户名和密码,那么势必存在信息泄露的风险;token,即服务令牌,就可以解决这个问题。
用户在访问OpenStack之前,首先需要使用用户名和密码获取一个token,接下来就可以使用此token访问任何资源。
OpenStack目前支持4种令牌,分别是UUID令牌、PKI令牌、PKIZ令牌和Fernet令牌。
uuid令牌,顾名思义,在Keyston中是一串36位的ASCII字符串,用于唯一标识一个令牌。这个uuid的内容是没有实际意义的,有关的令牌信息包括超时时间、用户id以及额外信息等都需要记录在数据库(包括内存数据库memcached和自己实现的kvs)中。每次访问资源或者API的时候都需要传递该uuid令牌,OpenStack的所有组件都需要访问Keystone去验证该uuid令牌,然后鉴权并执行操作。
PKI令牌,是一种借助非对称加密实现的令牌。在这里Keystone充当其中的ca,每当生成一个令牌,Keystone都会使用私钥对其进行签名;与uuid令牌不同的是,PKI令牌内包含了令牌的有效信息,因此使用该PKI令牌访问资源或API时,OpenStack的组件无需去Keystone进行验证,而是使用Keystone提供的数字证