OpenStack 的验证服务有两个主要功能:json
1. 用户管理(租户、用户、权限)swift
2. Service catalog,管理服务的目录和它们的endpoint。app
1. Useride
User即用户,他们表明访问openstack的人或程序。Users经过认证信息(credentials,如密码、API Keys等)进行验证。lua
2. Tenanturl
Tenant即租户,它是各个服务中的一些能够访问的资源集合。在Swift,资源是以tenant为单位进行划分的。Users默认的老是绑定到某些tenant上。翻译
3. Role3d
Role即角色,Roles表明一组用户能够访问的资源权限。Role是在验证服务定义,可是具体意义由执行操做的服务(好比 swift)解释。对象
4. Serviceblog
Service即服务,如Nova、Glance、Swift。根据前三个概念(User,Tenant和Role)一个服务能够确认当前用户是否具备访问其资源的权限。可是当一个user尝试着访问其租户内的service时,他必须知道这个service是否存在以及如何访问这个service,这里一般使用一些不一样的名称表示不一样的服务。在上文中谈到的Role,实际上也是能够绑定到某个service的。例如,当swift须要一个管理员权限的访问进行对象建立时,对于相同的role咱们并不必定也须要对nova进行管理员权限的访问。为了实现这个目标,咱们应该建立两个独立的管理员role,一个绑定到swift,另外一个绑定到nova,从而实现对swift进行管理员权限访问不会影响到Nova或其余服务。
5. Endpoint
Endpoint,翻译为“端点”,咱们能够理解它是一个服务暴露出来的访问点,若是须要访问一个服务,则必须知道他的endpoint。所以,在keystone中包含一个endpoint模板(endpoint template,在安装keystone的时候咱们能够在conf文件夹下看到这个文件),这个模板提供了全部存在的服务endpoints信息。一个endpoint template包含一个URLs列表,列表中的每一个URL都对应一个服务实例的访问地址,而且具备public、private和admin这三种权限。public url能够被全局访问,private url只能被局域网访问,admin url被从常规的访问中分离。
六、Token
Token是访问资源的钥匙。它是经过Keystone验证后的返回值,在以后的与其余服务交互中只须要携带Token值便可。每一个Token都有一个有效期,Token只在有效期内是有效的。
一、租户下,管理着一堆用户(人,或程序)。
二、每一个用户都有本身的credentials(凭证)。用户名+密码,或者,用户名+API key,或其余凭证。
三、用户在访问其余资源(计算、存储)以前,须要用本身的credential,去请求keystone服务,得到验证信息(主要是Token信息)和服务信息(服务目录和它们的endpoint)。
四、用户拿着Token信息,就能够去访问特色的资源了。
向keystone发送请求:
1 > POST http://192.168.150.129:35357/v2.0/tokens
1 > Accept: application/json
1 > Content-Type: application/json
{
"auth":{
"tenantName":"service",
"passwordCredentials":{
"username":"swift",
"password":"password"
}
}
}
keystone的响应
2 < 200
2 < Vary: X-Auth-Token
2 < Date: Tue, 30 Jul 2013 08:44:30 GMT
2 < Content-Length: 3354
2 < Content-Type: application/json
2 < Connection: keep-alive
{
"access": {
"token": {
"issued_at": "2013-07-30T08:44:28.336139",
"expires": "2013-07-31T08:44:28Z",
"id": "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-R4v3i+kQ81P+FPByRXY=",
"tenant": {
"description": null,
"enabled": true,
"id": "8c008d68bbd74cd88dd04a4b377254e7",
"name": "service"
}
},
"serviceCatalog": [
{
"endpoints": [
{
"adminURL": "http://192.168.150.129:8080",
"region": "RegionOne",
"internalURL": "http://192.168.150.129:8080/v1/AUTH_8c008d68bbd74cd88dd04a4b377254e7",
"id": "192d5461b9e5465f81074958886fbd93",
"publicURL": "http://192.168.150.129:8080/v1/AUTH_8c008d68bbd74cd88dd04a4b377254e7"
}
],
"endpoints_links": [
],
"type": "object-store",
"name": "swift"
},
{
"endpoints": [
{
"adminURL": "http://192.168.150.129:35357/v2.0",
"region": "RegionOne",
"internalURL": "http://192.168.150.129:5000/v2.0",
"id": "71af9dc85f634728b2d4384df36ecac9",
"publicURL": "http://192.168.150.129:5000/v2.0" } ], "endpoints_links": [ ], "type": "identity", "name": "keystone" } ], "user": { "username": "swift", "roles_links": [ ], "id": "663a26d5c78b41a19034034762dc5b0b", "roles": [ { "name": "_member_" }, { "name": "admin" } ], "name": "swift" }, "metadata": { "is_admin": 0, "roles": [ "9fe2ff9ee4384b1894a90878d3e92bab", "87fa6e8e51004488aba30020fd9a93dc" ] } }}