目前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. 连接web端,mysql,返回乱码解决

    参考:http://yushan.iteye.com/blog/265019

  2. PostgreSQL建表SQL语句写法

    DROP TABLE IF EXISTS bus; CREATE TABLE bus( id SERIAL PRIMARY KEY, mac ) NOT NULL UNIQUE, route int ...

  3. netty的线程池-----揭示了使用两个线程池的原因

    线程模型是Netty的核心设计,设计地很巧妙,之前项目中有一块处理并发的设计和Netty的Eventloop单线程设计类似,效果得到了实证. Netty5的类层次结构和之前的版本变化很大,网上也有很多 ...

  4. Android创建并响应选项菜单

    创建options menu 之前提到,Android的activity已经为我们提前创建好了android.view.Menu对象,并提供了回调方法onCreateOptionsMenu(Menu  ...

  5. python zeromq 使用

    Reference: http://blog.csdn.net/kwsy2008/article/details/49464663 本篇博客将介绍zmq应答模式,所谓应答模式,就是一问一答,规则有这么 ...

  6. EXCEL行倒叙

  7. (转载)设计模式之-策略模式(Strategy)

    原文:http://blog.sina.com.cn/s/blog_48df74430100t2m7.html 前言 部门组织培训,<Effective Java>,每人每天给大家讲解一节 ...

  8. java基础篇---异常处理

    认识异常 异常时导致程序中断运行的一种指令流,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,所以在程序的设计中必须考虑各种异常的发生,并正确的做好相应的处理,这样才能保证程序 ...

  9. VMWare: eth0: error fetching interface information : device not found

    VMWare: eth0: error fetching interface information : device not found  今天在VMware上新搭建的Redhat Linux 64 ...

  10. Fat-jar 打包,并使用 proguard 混淆代码

    . . . . . Build Fat Jar 的时候在 Clas-Path 中填入需要引用的第三方 jar 包,如下图: 点击下一步,只勾选自己的项目,其它第三方包都不要勾选,否则混淆会出现问题. ...