目前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. 光照渲染[Unity]

    http://www.unitymanual.com/m/Manual/RenderingPaths.html http://wenku.baidu.com/view/54eca9e09b896802 ...

  2. 【Java】Java复习笔记-第三部分

    修饰符abstract 抽象的,定义框架不去实现,可以修饰类和方法 abstract修饰类: 会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型 抽象类 ...

  3. pthread之线程堆栈

    转:http://blog.csdn.net/horstlinux/article/details/7666032 //先来讲说线程内存相关的东西,主要有下面几条: //进程中的所有的线程共享相同的地 ...

  4. python keras 神经网络框架 的使用以及实例

    先吐槽一下这个基于theano的keras有多难装,反正我是在windows下折腾到不行(需要64bit,vs c++2015),所以自己装了一个双系统.这才感到linux系统的强大之初,难怪大公司都 ...

  5. with open

    再考虑一个场景,要读取文件内容,并把年龄和名字的顺序交换存成新文件age_name.txt,这时可以同时打开两个文件:with open('name_age.txt', 'r') as fread, ...

  6. Android基础——Fragment控制切换多个页面

    今天接着上一篇文章,讲解一下Fragment的控制,主要是切换View和页面替换等操作.还有就是如何获取Fragment的管理对象,以及与Activity的通信方式. (PS:新建的QQ群,有兴趣可以 ...

  7. docker探索-Docker 1.13 编排能力进化(十三)

     简介  docker stack deploy和docker-compose up,这两个命令都是操作compose的yml文件的,有什么区别?想知道这个问题,看下面文章 https://yq.al ...

  8. WPF样式继承

    场景:样式A和样式B的背景颜色一样,但是文字颜色不一样 <Style x:key="BaseStyle" TargetType="Button"> ...

  9. Postgres快速创建大量测试数据

    DROP TABLE IF EXISTS color; CREATE TABLE color( cname ), remark ) ); ),) ,); 插入10000000数据之后,用时51秒 对于 ...

  10. oozie无法识别hadoopHA中的ns1

    [hadoop@dwdev-name1 m_goods_sale_detail]$ oozie job -config job.properties -run Error: E1603 : java. ...