OpenStack的各個服務(wù)組件都有提供相應(yīng)的API接口,如nova-api,gance-api等等。使用這些 API和擴展可以讓用戶在OpenStack云中進(jìn)行一系列的操作,如啟動服務(wù)主機,創(chuàng)建鏡像,給主機和鏡像設(shè)置元數(shù)據(jù),創(chuàng)建容器和對象等等。
但在調(diào)用任何組件的API前,必須通過Identity API進(jìn)行鑒權(quán)。
Identity Service
Identity Service 具備的功能:
??Tracking users and their permissions.
? Providing a catalog of available services with their API endpoints
開始我認(rèn)為是進(jìn)行用戶身份權(quán)限驗證的服務(wù),但是后來發(fā)現(xiàn)它只是進(jìn)行用戶授權(quán)。
為了方便管理,它抽象出了一組概念:
User | Credentials | Authentication | Token | Tenant | Service | Endpoint | Role | Keystone Client
具體對這些概念的說明,參見
http://docs.openstack.org/juno/install-guide/install/apt/content/keystone-concepts.html
http://www.cnblogs.com/yuki-lau/archive/2013/01/04/2843918.html
下圖是一個權(quán)限驗證的過程:

1. 用戶想要創(chuàng)建一個服務(wù)器。首先用戶要提供自己的認(rèn)證信息(可能是用戶名和密碼,或者是用戶名和API key),然后keystone提供一個臨時的token和一個服務(wù)列表(serviceCatalog)
2. 用戶使用臨時的token請求他所有的Tenant信息(可以理解為一些資源),keystone返回Tenants 列表。
3. Keystone 提供用戶目標(biāo)Tenant里面的服務(wù)列表。用戶用自己的鑒權(quán)信息獲得目標(biāo)Tenant的token和服務(wù)列表,然后使用tenant token和指定服務(wù)的endpoint(可以理解為具體的API)信息去啟動服務(wù)器。
4. 該服務(wù)去和keystone驗證該token是否正確。
5. Keystone返回這個token的相關(guān)信息:用戶獲得鑒權(quán)被允許訪問這個服務(wù);token和這個請求相符;token屬于這個用戶。
6. 服務(wù)執(zhí)行該請求(創(chuàng)建服務(wù)器)。
7. 執(zhí)行完成后返回結(jié)果。
OpenStack中調(diào)用任何API,在執(zhí)行請求前都要經(jīng)過keystone認(rèn)證,下圖說明了keystone和其他各個服務(wù)組件的關(guān)系:

API調(diào)用方式
OpenStack提供了多種API調(diào)用的方式,參見http://docs.openstack.org/api/quick-start/content/ ,有
cURL
OpenStack命令行客戶端
REST客戶端
軟件開發(fā)工具包(SDK)
Identity API
Identity API是一個ReSTful web service,是所有service APIs的入口。要訪問Identity API,你必須知道它的URL和訪問方式。默認(rèn)Identity的服務(wù)端口為5000,具體可以查詢keystone中對各個服務(wù)的endpoint的設(shè)置。下面介紹一些API的具體內(nèi)容
請求認(rèn)證并生成token的API:
method: 'POST' ? ? URL : '/v2.0/tokens'
每個ReST請求需要有X-Auth-Token 作為header。
認(rèn)證時,需要提供user ID和密碼或者是一個token。
如果token過期,會返回一個401
如果是請求中的token過期,會返回404
Identity將過期token視為無效token。
部署時可以指定token的過期時間
正常返回碼:200,203
錯誤返回碼:identityFault (400, 500, …), userDisabled (403), badRequest (400), unauthorized (401), forbidden (403), badMethod (405), overLimit (413), serviceUnavailable (503), itemNotFound (404)
所有的API提供json和xml兩種格式
可以訪問http://developer.openstack.org/api-ref.html 官方文檔獲取更具體的內(nèi)容。