(弃)解读Openstack Identity API v2.0
目前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的更多相关文章
- OpenStack Identity API v3 (CURRENT)
Table Of Contents Identity API v3 (CURRENT) Authentication and token management Password authenticat ...
- 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 ...
- OpenStack Identity API v3 extensions (CURRENT)
Table Of Contents Identity API v3 extensions (CURRENT) OS-ENDPOINT-POLICY API Associate policy and e ...
- laravel Passport - 创建 REST API 用户认证以及Dingo/Api v2.0+Passport实现api认证
第一部分: 安装passport 使⽤ Composer 依赖包管理器安装 Passport : composer require laravel/passport 接下来,将 Passport 的服 ...
- laravel Passport - Dingo/Api v2.0+Passport 实现 api 认证
第一部分: 安装passport 使⽤ Composer 依赖包管理器安装 Passport : composer require laravel/passport 接下来,将 Passport 的服 ...
- Geocoding java调用百度地图API v2.0 图文 实例( 解决102错误)
如何使用? 第一步:申请ak(即获取密钥),若无百度账号则首先需要注册百度账号. 第二步,拼写发送http请求的url,注意需使用第一步申请的ak. 第三步,接收http请求返回的数据(支持json和 ...
- dingo/API 最新版 V2.0 之安装讲解
我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https:// ...
- 第一节: dingo/API 最新版 V2.0 之安装讲解(连载)
我发现关于dingo/API V2.0的资料少之又少,应该也是发布时间不久的原因.下面,我就来给大家讲解(翻译)下官方的英文文档,如果有说的不对的地方,请指正.先附上,官网wiki地址https:// ...
- POLARDB v2.0 技术解读
点击观看“POLARDB 2.0 升级发布会”:https://yq.aliyun.com/live/1136 回顾POLARDB 1.0 POLARDB 1.0 主要的改进包括采用了计算存储分离的架 ...
随机推荐
- java多线程20 : ReentrantLock中的方法 ,公平锁和非公平锁
公平锁与非公平锁 ReentrantLock有一个很大的特点,就是可以指定锁是公平锁还是非公平锁,公平锁表示线程获取锁的顺序是按照线程排队的顺序来分配的,而非公平锁就是一种获取锁的抢占机制,是随机获得 ...
- linux 的内核的作用和功能
Linux内核[kernel]是整个操作系统的最底层, 它负责整个硬件的驱动,以及提供各种系统所需的核心功能, 包括防火墙机制.是否支持LVM或Quota等文件系统等等, 如果内核不认识某个最新的硬件 ...
- 好用的vim插件
# 好用的vim插件 ### 简介------------------------------ 记录vim好用的插件 ### vimcdoc vim中文帮助文档-------------------- ...
- Eclipse Git下载问题:Internal error; consult Eclipse error log
在使用Git下载代码时偶尔会遇到 Internal error; consult Eclipse error log 这个报错. 简述下个人解决思路: Eclipse 错误日志报错为:org.ecl ...
- Faiss教程:GPU
Fassi通过CUDA支持GPU,要求3.5以上算力,float16要求CUDA7.5+ 通过index_gpu_to_cpu可以将索引从GPU复制到CPU,index_cpu_to_gpu 和 in ...
- iOS 设置导航栏全透明
- (void)viewWillAppear:(BOOL)animated{ //设置导航栏背景图片为一个空的image,这样就透明了 [self.navigationController.navig ...
- python keras 神经网络框架 的使用以及实例
先吐槽一下这个基于theano的keras有多难装,反正我是在windows下折腾到不行(需要64bit,vs c++2015),所以自己装了一个双系统.这才感到linux系统的强大之初,难怪大公司都 ...
- Mysql 优化,慢查询
最近项目上遇到点问题,服务器出现连接超时.上次也是超时,问题定位到mongodb上,那次我修改好了,这次发现应该不是这个的问题了. 初步怀疑是mysql这边出问题了,写的sql没经过压力测试,导致用户 ...
- C语言 · 校门外的树
算法提高 校门外的树 时间限制:1.0s 内存限制:256.0MB 问题描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的 ...
- kafka集群中jmx端口设置
jmx端口主要用来监控kafka集群的. 在启动kafka的脚本kafka-server-start.sh中找到堆设置,添加export JMX_PORT="9999" if [ ...