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

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