目前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