目前OpenStack社區提供了詳盡的API文檔,并配有豐富的說明和示例,關于Identity API v2 查看這里 , 關于Identity API v3請 查看這里 。
盡管現在官方已經不建議OpenStack Identity API v2.0,但是出于后向兼容考慮,目前的Keystone發行版仍支持v2版的API。v2版API是理解keystone功能的關鍵,v3 API作為v2 API的超集在原有基礎上做了一些改動,這些改動與v3 API的詳細解讀將留待以后的文章完成。本文主要解讀OpenStack Identity API v2.0的核心內容,在參考官方 Reference 的基礎上做了相關篩選,可以作為更為精簡的Identity API 功能參考手冊。
1.概況
1.1 請求與響應的格式
明確請求格式
??? 在請求文件頭的Content-Type字段指定. 有兩種可選格式:
??? JSON, Content-Type: application/json
??? XML,Content-Type: application/xml
規定響應格式
??? 在請求文件頭的Accept字段指定,可選值與Conten-Type相同,或者在請求URI之后添加.xml或.json擴展(該方法具有高優先級)。
?
示例——JSON 格式HTTP請求的頭信息
??? POST /v2.0/tokens HTTP/1.1??????????? 方法? 目標URL? 協議
??? Host: identity.api.openstack.org?????? 主機
???
Content-Type:
application/json??????? 請求的格式
???
Accept:
application/xml ? ? ? ? ? ? ? ? ? ?接收響應的格式
?
1.2 內容壓縮
可以壓縮請求或響應的body數據,具體的做法是分別在請求和響應頭信息中下述字段指明壓縮手段:
HTTP/1.1 Request???????? Accept-Encoding: gzip
HTTP/1.1 Response???? Content-Encoding: gzip
?
1.3 顯示容量限制(marker & limit)
可以在請求URI中指定limit和marker參數,這兩個參數均是可選的。
marker參數代表了前一個列表中最后一項的ID。不同的內容項以更新時間排序,當更新時間不可用時,才以id排序。
請求中的limit參數限定了響應每一頁的數據項容量,如下面的請求
GET http://identity.api.openstack.org/v2.0/1234/tenants?limit=1
規定了keystone服務器返回的每一頁中只包含一個目標數據項。為了能夠了解全部的數據項,服務器返回的信息在遵照客戶端設置的分頁容量同時提供"next"和"previous"字段,其內容分別是下一頁和上一頁的URL,利用這兩個字段,客戶端可以請求超過自己設定的分頁容量的數據。
如果客戶端請求中設置的響應頁容量(limit)超過了服務器端部署時的配置限制的話,那么響應將會報413(overLimit)錯誤,如果客戶端請求中設置的marker不是一個有效的ID的話,那么將會報404(itemNotFound)錯誤。
需要注意的是,當請求的對象集合是空集時,此時不會報404錯誤,此時客戶端就會受到一個空的結果。
1.4 錯誤響應代碼
??? identityFault?????????????? 500, 400
??? serviceUnavailable ? ?503
??? badRequest????????????? 400
??? unauthorized???????????? 401
??? overLimit?????????????????? 413
??? userDisabled??????????? 403
??? forbidden?????????????????? 403
??? itemNotFound????????? 404
??? tenantConflict?????????? 409
?
2主要API匯總
2.1Client 操作
主要包括API 版本信息、擴展和令牌相關的查詢操作。
GET /???????????????????????????????????????????????? 獲得所有API的版本信息
GET /v2.0???????????????????????????????????????? 顯示Identity API v2.0的詳細信息
GET /v2.0/extensions???????????????????? 顯示所有可用的擴展信息
GET /v2.0/extensions/{alias}???????? 獲得指定擴展的詳細信息
POST /v2.0/tokens???????????????????????? 身份認證,同時獲取token ? ? ? ? ??
?
2.2 Administrative操作
主要包括版本信息,擴展,用戶和工程的查詢操作,以及登錄系統進行身份認證的令牌操作。
GET /v2.0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?顯示Identity API v2.0的詳細信息
GET /v2.0/extensions???????????????????? 顯示所有可用的extensions
GET /v2.0/extensions/{alias}???????? 獲取某一擴展的詳細信息
POST /v2.0/tokens ? ? ? ? ? ? ? ? ? ? ? ??
身份認證,同時獲取token
GET ??/v2.0/tokens/{tokenId}{?belongsTo} ?
驗證令牌,同時確認該令牌屬于指定租戶
HEAD /v2.0/tokens/{tokenId}{?belongsTo} ?
驗證令牌,確認該令牌屬于指定租戶,只收取響應的頭信息,效率更高
GET /v2.0/users/{?name} ? ? ? ? ? ? ? ? ? ? ? ? ? ??
通過用戶姓名獲取某用戶的具體信息
GET /v2.0/users/{user_id}????????????????????????????
通過用戶id來獲取某用戶的具體信息
GET /v2.0/users/{user_id}/roles???????????????????
列出一個用戶的所有角色
GET /v2.0/tenants{?marker,limit} ? ? ? ? ? ? ? ??
顯示所有的租戶
GET /v2.0/tenants{?marker,limit,name}???????
通過租戶名稱查詢其詳細信息
GET /v2.0/tenants/{tenantId}??????????????????????
通過租戶ID查詢其詳細信息
GET /v2.0/tenants/{tenantId}/users/{userId}/roles????????????????????????????????????????
顯示指定用戶在指定工程上的所有角色
?
2.3OS-KSADM admin 擴展
主要包括:用戶、角色、項目和服務部分的操作
GET /v2.0/users ? ? ? ? ? ? ? ? ??
顯示所有用戶
POST /v2.0/users???????????????????
添加一個用戶
PUT /v2.0/users/{userId}???????????????
更新一個用戶
DELETE??????? /v2.0/users/{userId}???????????????
刪除一個用戶
GET /v2.0/users/{userId}/roles{?serviceId,marker,limit} ? ? ? ? ??
查看某用戶全部角色
PUT /v2.0/users/{userId}/roles/OSKSADM/{roleId}???
為用戶添加角色
DELETE??????? /v2.0/users/{userId}/roles/OSKSADM/{roleId}???
刪除用戶的一個角色
GET /v2.0/OS-KSADM/roles????????????????
查看當前角色
GET /v2.0/OS-KSADM/roles/
查看所有角色
POST /v2.0/OS-KSADM/roles
添加角色
GET /v2.0/OS-KSADM/roles/{roleId}???????????
根據角色ID獲取角色信息
DELETE??????? /v2.0/OS-KSADM/roles/{roleId}???????????
刪除一個角色
POST /v2.0/tenants ? ? ? ? ? ? ? ? ??
創建一個租戶
POST /v2.0/tenants/{tenantId}???????????
更新一個租戶
DELETE /v2.0/tenants/{tenantId} ? ? ? ? ??
刪除一個租戶
GET /v2.0/tenants/{tenantId}/users{?marker,limit}
列出一個租戶的所有用戶
PUT /v2.0/tenants/{tenantId}/users/{userId}/roles/OS-KSADM/{roleId}
為指定租戶中的指定用戶添加指定角色
DELETE /v2.0/tenants/{tenantId}/users/{userId}/roles/OS-KSADM/{roleId}
刪除租戶中用戶的某角色
GET /v2.0/OS-KSADM/services{?marker,limit}
顯示所有服務
POST ?/v2.0/OS-KSADM/services{?marker,limit}
添加服務
GET /v2.0/OS-KSADM/services/{?name}
根據指定服務名查看服務信息
GET /v2.0/OS-KSADM/services/{serviceId}???????
根據指定服務ID查看服務信息
DELETE??????? /v2.0/OS-KSADM/services/{serviceId
刪除服務
?
2.4 OS-KSCATALOG 擴展
主要包括對終端和終端模板的操作
GET /v2.0/tenants/{tenantId}/OSKSCATALOG/endpoints
列出一個租戶的所有endpoints
POST /v2.0/tenants/{tenantId}/OSKSCATALOG/endpoint
為租戶添加endpoint
GET /v2.0/tenants/{tenantId}/OSKSCATALOG/endpoints/{endpointId}
獲取租戶的特定endpoint
DELETE /v2.0/tenants/{tenantId}/OSKSCATALOG/?endpoints/{endpointId}
刪除租戶的特定endpoint
GET /v2.0/OS-KSCATALOG/endpointTemplates{?serviceId}
列出所有endpoint模板
POST /v2.0/OS-KSCATALOG/endpointTemplates{?serviceId}
添加endpoint模板
GET /v2.0/OS-KSCATALOG/endpointTemplates/{endpointTemplateId}
獲取endpoint模板
PUT /v2.0/OS-KSCATALOG/endpointTemplates/{endpointTemplateId}
更新endpoint模板
DELETE /v2.0/OS-KSCATALOG/endpointTemplates/{endpointTemplateId}
刪除endpoint模板
?
2.5 OS-KSEC2 擴展
主要包括對EC2兼容的Credential的操作
GET /v2.0/users/{userId}/OS-KSADM/credentials{?marker,limit}
列出credentials
POST??????? /v2.0/users/{userId}/OS-KSADM/credentials{?marker,limit}
為一個用戶添加credential
GET??????? /v2.0/users/{userId}/OS-KSADM/credentialsOSKSEC2:ec2Credentials
獲取用戶的credentials
POST??????? /v2.0/users/{userId}/OS-KSADM/credentials/OSKSEC2:ec2Credentials
更新用戶的credentials
DELETE??????? /v2.0/users/{userId}/OS-KSADM/credentials/OSKSEC2:ec2Credentials
刪除用戶的credentials
GET??????? /v2.0/users/{userId}/OS-KSADM/credentials/OSKSEC2:ec2Credentials/{type}{?type}
根據指定類型顯示credentials
?
2.6 OS-KSS3擴展
GET /v2.0/users/{userId}/OS-OS-KSS3/credentials{?marker,limit}
列出credentials
POST /v2.0/users/{userId}/OS-OS-KSS3/credentials{?marker,limit}
為一個用戶添加credential
GET /v2.0/users/{userId}/OS-OS-KSS3/credentials/s3credentials
獲取用戶的credentials
POST /v2.0/users/{userId}/OS-OS-KSS3/credentials/s3credentials
更新用戶的credentials
DELETE /v2.0/users/{userId}/OS-OS-KSS3/credentials/s3credentials
刪除用戶的credentials
GET /v2.0/users/{userId}/OS-OS-KSS3/credentials/s3credentials/{type}{?type}
根據指定類型顯示credentials
?
2.7 OS-KSVALIDATE擴展
GET /v2.0/OS-KSVALIDATE/token/validate{?belongsTo,HP-IDM-serviceId}
驗證一個令牌,屬于指定的租戶和服務,返回對應客戶的權限
HEAD /v2.0/OS-KSVALIDATE/token/validate{?belongsTo,HP-IDM-serviceId}
上一個API的高效版
GET /v2.0/OS-KSVALIDATE/token/endpoints{?HP-IDM-serviceId}???????????????
列出與一個令牌關聯的endpoints
?
以下API v2.0請參考《 Identity API v2.0 》
RAX-GRPADM admin extensions
RAX-KSGRP admin extensions
RAX-KSKEY adminextensions
?
OpenStack Identity API參考資料
1. v3 版Python API
http://docs.openstack.org/developer/python-keystoneclient/using-api-v3.html
2. v3版API官方詳解
https://github.com/openstack/identity-api/blob/master/v3/src/markdown/identity-api-v3.md
3. v2版API參考手冊
http://docs.openstack.org/api/openstack-identity-service/2.0/content/
4. v2版Python API
http://docs.openstack.org/developer/python-keystoneclient/using-api-v2.html
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
