1、概況html
1. 請求認證token時,需發送的認證信息包括:python
2. 若是認證成功,會得到認證tokenjson
3. 在發送的API請求中將認證token填入X-Auth-Token字段。能夠一直使用這個認證token發送API請求,直到任務完成或出現401非認證錯誤。api
4. 若是出現401非認證錯誤,能夠從新請求一個認證token。app
2、詳細流程舉例curl
說明:如下例子會使用到cURL( http://curl.haxx.se/)和OpenStack APIs( http://developer.openstack.org/api-ref.html)ide
一、認證過程ui
使用以下命令請求認證token:url
$ curl -i 'http://127.0.0.1:5000/v2.0/tokens' -X POST -H "Content-Type: application/json" -H "Accept: application/json" -d '{"auth": {"tenantName": "admin", "passwordCredentials": {"username": "admin", "password": "secretsecret"}}}'
若是認證成功,將得到200 OK響應報文,其中響應body包含了一個token和過時時間,前者格式爲"id":"token
",後者格式爲"expires":"datetime
"。詳細狀況以下:spa
HTTP/1.1 200 OK Vary: X-Auth-Token Content-Type: application/json Content-Length: 5858 Date: Wed, 06 Nov 2013 20:06:24 GMT
{
"access":
{
"token": { "issued_at": "2013-11-06T20:06:24.113908", "expires": "2013-11-07T20:06:24Z", "id": "{token}", "tenant": { "description": null, "enabled": true, "id": "604bbe45ac7143a79e14f3158df67091", "name": "admin" } }, "serviceCatalog": [ { "endpoints": [ { "adminURL": "http://166.78.21.23:8774/v2/604bbe45ac7143a79e14f3158df67091", "region": "RegionOne", "internalURL": "http://166.78.21.23:8774/v2/604bbe45ac7143a79e14f3158df67091", "id": "9851cb538ce04283b770820acc24e898", "publicURL": "http://166.78.21.23:8774/v2/604bbe45ac7143a79e14f3158df67091" } ], "endpoints_links": [], "type": "compute", "name": "nova" },
...
"user": { "username": "admin", "roles_links": [], "id": "3273a50d6cfb4a2ebc75e83cb86e1554", "roles": [ { "name": "admin" } ], "name": "admin" }, "metadata": { "is_admin": 0, "roles": [ "b0d525aa42784ee0a3df1730aabdcecd" ] } } }
二、發送API請求過程
說明:如下使用 Identity API (http://developer.openstack.org/api-ref-identity-v3.html)和Compute API (http://developer.openstack.org/api-ref-compute-v2.html)的請求舉例。
2.1 使用Identity API 請求tenants list,以下:
$ curl -i -X GET http://166.78.21.23:35357/v2.0/tenants -H "User-Agent: python-keystoneclient" -H "X-Auth-Token: token"
結果內容:
{ "tenants_links": [], "tenants": [ { "description": null, "enabled": true, "id": "3eddf34c2f814bd5bc50a382f8fba1c6", "name": "demo" }, { "description": null, "enabled": true, "id": "604bbe45ac7143a79e14f3158df67091", "name": "admin" }, { "description": null, "enabled": true, "id": "78323d3574e6421b98fe5894475c69fe", "name": "service" }, { "description": null, "enabled": true, "id": "da73856734d84ec29958b048d8708d82", "name": "invisible_to_admin" }, { "description": null, "enabled": true, "id": "ee30a93eaade41acbcf210780dd7a0ba", "name": "alt_demo" } ] }
2.2 使用Compute API 請求servers list,以下:
$ curl -v -H "X-Auth-Token:token" http://208.123.85.197:8774/v2/tenant_id/servers
結果內容:
{ "server": { "adminPass": "MVk5HPrazHcG", "id": "5bbcc3c4-1da2-4437-a48a-66f15b1b13f9", "links": [ { "href": "http://openstack.example.com/v2/openstack/servers/5bbcc3c4-1da2-4437-a48a-66f15b1b13f9", "rel": "self" }, { "href": "http://openstack.example.com/openstack/servers/5bbcc3c4-1da2-4437-a48a-66f15b1b13f9", "rel": "bookmark" } ] } }
3、詳細流程圖
若是給出tenant直接從如下步驟開始:
4、keystone
keystone的管控主要針對三個方面:
一、用戶,對用戶進行認證
二、服務,管理服務的訪問點
三、權限,即role,這裏的role相對比較複雜:
role的定義不僅依靠keystone,也依賴於各個服務組件對role的承認,其中因爲user能夠屬於多個project,因此僅對user是沒法管理權限的,只能針對(user,project)對進行權限管理。
1)權限管理抽象成role後,keystone負責記錄並綁定role和(user,project)對
2)各服務組件在其自身的policy.json中定義role和各個具體操做之間的承認關係。
整個流程:
1.用戶首先到keystone認證,獲取token,同時會獲取service endpoints
2.用戶使用token訪問心儀的service endpoint,這裏token只是管控user對service的進入,可是無論控user在service裏面的具體operation
3.service會根據用戶的請求識別role,而後檢測policy.json裏面該role所綁定的operation,以此來許可operation
參考文章:
http://docs.openstack.org/api/quick-start/content/index.html#authenticate
http://docs.openstack.org/icehouse/install-guide/install/yum/content/keystone-concepts.html