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


 
					 
					