目前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.2Administrative操作

  主要包括版本信息,扩展,用户和工程的查询操作,以及登录系统进行身份认证的令牌操作。

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.4OS-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.5OS-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.6OS-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.7OS-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

(弃)解读Openstack Identity API v2.0的更多相关文章

  1. OpenStack Identity API v3 (CURRENT)

    Table Of Contents Identity API v3 (CURRENT) Authentication and token management Password authenticat ...

  2. OpenStack Identity API v3

    Table Of Contents OpenStack Identity API v3 What’s New in Version 3.7 What’s New in Version 3.6 What ...

  3. OpenStack Identity API v3 extensions (CURRENT)

    Table Of Contents Identity API v3 extensions (CURRENT) OS-ENDPOINT-POLICY API Associate policy and e ...

  4. laravel Passport - 创建 REST API 用户认证以及Dingo/Api v2.0+Passport实现api认证

    第一部分: 安装passport 使⽤ Composer 依赖包管理器安装 Passport : composer require laravel/passport 接下来,将 Passport 的服 ...

  5. laravel Passport - Dingo/Api v2.0+Passport 实现 api 认证

    第一部分: 安装passport 使⽤ Composer 依赖包管理器安装 Passport : composer require laravel/passport 接下来,将 Passport 的服 ...

  6. Geocoding java调用百度地图API v2.0 图文 实例( 解决102错误)

    如何使用? 第一步:申请ak(即获取密钥),若无百度账号则首先需要注册百度账号. 第二步,拼写发送http请求的url,注意需使用第一步申请的ak. 第三步,接收http请求返回的数据(支持json和 ...

  7. dingo/API 最新版 V2.0 之安装讲解

    我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https:// ...

  8. 第一节: dingo/API 最新版 V2.0 之安装讲解(连载)

    我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https:// ...

  9. POLARDB v2.0 技术解读

    点击观看“POLARDB 2.0 升级发布会”:https://yq.aliyun.com/live/1136 回顾POLARDB 1.0 POLARDB 1.0 主要的改进包括采用了计算存储分离的架 ...

随机推荐

  1. (转)Linux下的输入/输出重定向

    Linux环境中支持输入输出重定向,用符号<和>来表示.0.1和2分别表示标准输入.标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出,比如 2>lee.dat 表示 ...

  2. WAVE文件格式解析

    WAVE 文件作为Windows多媒体中使用的声音波形文件格式之一,它是以RIFF(Resource Interchange File Format)格式为标准的.这里不针对RIFF文件格式做介绍,不 ...

  3. WPF学习笔记(1)——image控件图片不显示的问题

    说明(2017-6-7 16:08:35): 1. 本来想用winform的,用winform就没这么多破事了. 2. 不过项目要用WPF,拉出一个mediaelement控件,视频正常显示. 3. ...

  4. Sortable拖拽排序插件数据筛选

    后台有拖拽排序功能,然而前段在开发的时候,一整页的数据都发给后端了. 于是查看前端代码,想到了如下解决办法,即先把排序前的保存,然后对比排序后的,有差异的才发回给后端. var new_ids_ord ...

  5. jstl报错:Property 'name' not found on type java.lang.String

    <c:forEach items='${navigationMenus}' var="navigationMenu" >                         ...

  6. IIS时间格式设置

    IIS时间格式调整: (已解决)今天在用IIS7的时候发现一个关于时间格式的问题,当我在ASP中使用now()时间函数的时候,日期是以“/”来分隔,而不是以“-”来分隔的,使得我在运行程序的时候老出错 ...

  7. client version is higher than daemon version (client is v.1.29 daemon is v.1.22)

    安装好coreseek,建了索引,启动了服务,用php建了一个test.php,用于测试:<?phpinclude_once('sphinxapi.php');//向搜索引擎发起请求 $cl = ...

  8. C#使用线程池创建线程

    using System; using System.Threading; public class Example { public static void Main() { // Queue th ...

  9. MAC版Eclipse的常用快捷键

    一.Command类 Command+1 快速修复 Command+d 删除当前行 Command+Option+↓ 复制当前行到下一行 Command+Option+↑ 复制当前行到上一行 Comm ...

  10. 模式匹配的KMP算法详解

    这种由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现的改进的模式匹配算法简称为KMP算法.大概学过信息学的都知道,是个比较难理解的算法,今天特把它搞个彻彻底底明明白白. 注意到这 ...