目前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. java多线程20 : ReentrantLock中的方法 ,公平锁和非公平锁

    公平锁与非公平锁 ReentrantLock有一个很大的特点,就是可以指定锁是公平锁还是非公平锁,公平锁表示线程获取锁的顺序是按照线程排队的顺序来分配的,而非公平锁就是一种获取锁的抢占机制,是随机获得 ...

  2. linux 的内核的作用和功能

    Linux内核[kernel]是整个操作系统的最底层, 它负责整个硬件的驱动,以及提供各种系统所需的核心功能, 包括防火墙机制.是否支持LVM或Quota等文件系统等等, 如果内核不认识某个最新的硬件 ...

  3. 好用的vim插件

    # 好用的vim插件 ### 简介------------------------------ 记录vim好用的插件 ### vimcdoc vim中文帮助文档-------------------- ...

  4. Eclipse Git下载问题:Internal error; consult Eclipse error log

    在使用Git下载代码时偶尔会遇到  Internal error; consult Eclipse error log 这个报错. 简述下个人解决思路: Eclipse 错误日志报错为:org.ecl ...

  5. Faiss教程:GPU

    Fassi通过CUDA支持GPU,要求3.5以上算力,float16要求CUDA7.5+ 通过index_gpu_to_cpu可以将索引从GPU复制到CPU,index_cpu_to_gpu 和 in ...

  6. iOS 设置导航栏全透明

    - (void)viewWillAppear:(BOOL)animated{ //设置导航栏背景图片为一个空的image,这样就透明了 [self.navigationController.navig ...

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

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

  8. Mysql 优化,慢查询

    最近项目上遇到点问题,服务器出现连接超时.上次也是超时,问题定位到mongodb上,那次我修改好了,这次发现应该不是这个的问题了. 初步怀疑是mysql这边出问题了,写的sql没经过压力测试,导致用户 ...

  9. C语言 · 校门外的树

    算法提高 校门外的树   时间限制:1.0s   内存限制:256.0MB      问题描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的 ...

  10. kafka集群中jmx端口设置

    jmx端口主要用来监控kafka集群的. 在启动kafka的脚本kafka-server-start.sh中找到堆设置,添加export JMX_PORT="9999" if [ ...