分享

OpenStack编程:OpenStack的身份API V2

nettman 发表于 2014-8-18 09:47:42 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 3 34400
本帖最后由 nettman 于 2014-8-18 09:57 编辑
问题导读:
1.OpenStack的身份API是使用什么风格的Web服务接口来实现
2.OpenStack的身份包含哪些身份概念?
3.故障返回码错误代码含义是什么?
4.通过那个URI可以获取一个机密问题和答案给指定的用户?
5.OpenStack的身份API除了支持json数据的序列格式化,还支持什么格式?





1     内容简介
OpenStack的身份允许客户获取令牌用于访问OpenStack的云服务。


2     一般API信息
该OpenStack的身份API是使用REST风格的Web服务接口来实现。 所有的请求进行身份验证和操作对OpenStack的身份API应该TCP端口443上使用SSL的HTTP(HTTPS)来执行。


2.1   身份概念
OpenStack的身份具有以下主要概念:

  
1.1 身份概念
  
概念
描述
用户
使用OpenStack的云服务一个人,系统或服务的数字表示。 OpenStack的身份验证服务验证传入的请求正在由谁声称要进行呼叫的用户。
  
用户可以登录,并且可以被分配令牌来访问资源。 用户可以直接分配给特定租户,并表现得好像它们是包含在该租户。
证书
数据所属的,是由拥有,并且通常仅通过使得用户能够出示证明自己的身份的用户已知的。
认证
在上下文OpenStack的身份,确认索赔的用户或真理的身份的行为。OpenStack的身份确认传入的请求正在由谁声称通过验证一组声称,用户正在来进行呼叫的用户。
  
这些说法最初是在一组凭据(用户名和密码,或者用户名和API密钥)的形式。 初始确认后,OpenStack的身份问题,用户令牌,用户可以再提供证明,使后续请求时,他们的身份已被验证。
象征
用于访问资源的文本的任意位。 每个标记都有一个范围,说明哪些资源是与它接触。 令牌可以随时被撤销,有效期为有限的持续时间。
  
而OpenStack的身份支持此版本基于令牌的认证,其目的是为它在未来支持更多的协议。 这样做的目的是为它是一个集成服务至上,而不是渴望成为一个完整的身份存储和管理解决方案。
承租人
用于分组或分离的资源和/或标识对象的容器。 根据不同的服务运营商,租客可以映射到一个客户,帐户,组织或项目。
服务
一个OpenStack的服务,如计算(Nova),对象存储(Swift),或影像服务(Glance)。 一个服务提供的,通过它用户可以访问的资源和执行操作的一个或多个端点。
端点
通过网络访问的地址,通常是由一个URL,其中可访问的服务描述。 如果使用的模板的扩展,可以创建一个端点的模板,它代表所有耗材服务可跨区域的模板。
角色
一个用户承担执行一组特定的操作时,有个性。 角色包括一组权利和特权。 用户承担该角色继承这些权利和特权。
  
在OpenStack的身份,是签发给用户一个令牌包括角色列表中的用户可以承担。 正在调用该用户的服务决定他们如何解释所设定角色的用户拥有的和哪些操作或资源的每个角色授予访问权限。
  
它是由单独的服务,如计算服务和图像服务来分配这意味着这些角色。 至于标识服务而言,角色是由用户指定的任意名称。


2.2   请求/响应类型
该OpenStack的身份API同时支持JSON和XML数据的序列化格式。 指定请求的格式是使用 Content-Type 头,并须为具有请求主体的操作。 响应格式可以在请求或者使用Accept头或添加的 。xml 或json的 扩展请求URI来指定。 注意,这是可能的响应进行使用从请求不同的格式序列。 如果没有指定响应格式,JSON是默认的。 如果同时使用一个 Accept 头和查询扩展指定了有冲突的格式,查询扩展优先。


1.2 响应类型
格式
Accept头
查询扩展
默认
JSON
Application/JSON
.JSON
Yes
XML
Application/XML
.XML
No


2.3   内容压缩
请求和响应体的数据我与以gzip压缩编码加速API调用和响应的交互性能。 这是使用 Accept-Encoding 头来自客户端的请求控制,通过在服务器响应中的 Content-Encoding 头指示。 除非头显式设置,编码默认为禁用 ​​。
1.3 压头
头类型
名称
HTTP/1.1Request
Accept-Encoding
gzip
HTTP/1.1Response
Content-Encoding
gzip



2.4   分页集合
为了减少负载上的服务,列表操作将返回在时间项的最大数量。 返回的最大项数由身份提供者确定。 导航集合,参数 limit marker 可以在URI进行设置。 标记的参数是在前面的列表中的最后一个项目的ID。 项目是按更新时间排序。 当更新时间不可它们是由ID进行排序。 极限参数设置页面大小。 这两个参数是可选的。 如果客户端请求超出了其支持的部署超限的 limit  (413)故障可能会被抛出。 使用无效的ID的标记将返回一个itemNotFound(404)故障。


   
分页集合返回itemNotFound(404)故障时,集合为空——客户端应该期待一个空的集合。


为方便起见,集合包含原子“下一步”和“上一个”链接。 该列表中的第一个页面将不会包含“上一页”链接,在列表中的最后一页将不包含一个“下一个”链接。



2.5   版本
该OpenStack的身份API使用既是一个URI和MIME类型的版本控制方案。 在URI方案,路径的第一个元素包含了目标版本标识符。 MIME类型的版本控制方案使用HTTP内容协商,其中 接受 或 内容类型 标头包含一个MIME类型,其中包含的版本ID作为参数。 一个版本的MIME类型总是与基本MIME类型。 如果同时使用一个HTTP标头和一个URI,指定了版本冲突,该URI优先。


   
MIME类型的版本控制方法允许创建永久链接,因为在URI路径没有指定版本方案:https://api.identity.openstack.org/tenants/12234


如果提出的请求没有在URI中指定的版本或通过HTTP头,那么多的选择响应(300)将按照提供的联系和MIME类型的可用版本。

新的特性和功能,不破坏API的兼容性将在API作为扩展当前版本的介绍(见下文)和URI和MIME类型将保持不变。 特性或功能的变化,会在必要的API兼容性休息,需要一个新的版本,这将导致URI和MIME类型的版本被更新。 当新的API版本发布,旧版本将被标记为 过时。 供应商应与开发商和合作伙伴合作,以确保有足够的时间迁移到新版本过时的版本已停产前。

应用程序可以通过对根URL的GET编程方式确定可用的API版本的认证系统返回。 请注意,该版本的资源采用Atom表示发出一个请求时,支持 接受 包含应用程序/原子+ XML页眉或通过添加一个。原子请求URI。 这使得标准的Atom客户跟踪版本号的变化。

您还可以通过对基础版本的URL发出GET获得有关特定版本的其他信息。 版本请求的URL应该总是最后以斜线(/)。 如果省略斜线,服务器可能会响应一个 302 重定向请求。 格式的扩展名可以被放置在斜线之后。 注意,这是一种特殊情况,不成立为其他的API请求。 一般情况下,如/ tenants.xml和/tenants/.xml请求等同处理。


详细版本响应包含指向两个人类可读和API服务的一个计算机处理的描述。 该机器可处理的说明上写的是Web应用程序描述语言(WADL)。

   
如果有两种规格之间的差异,在WADL是权威的,因为它包含了最准确和最新的说明了API服务。


2.6   扩展
该OpenStack的身份API是可扩展的。 扩展有两个目的:它们允许引入新的功能的API中,而不需要一个版本的变化,他们允许提出供应商特定的利基功能。 应用程序可以通过编程方式确定哪些分机都可以通过执行上的/扩展URI发出 GET请求 。 请注意,这是在一个API版本的扩展可能无法在另一个版本的要求。


  
动词
  
URI
描述
GET
/extensions
返回可用的扩展名列表


每个扩展标识由两个独特的标识符,一个 命名空间 和一个 别名 。 另外一个扩展包含各种格式的文档链接。

扩展也可以通过其独特的别名分别查询。 这提供了简单的检查,如果延长可作为一个不可用的扩展将发出itemNotFound(404)响应的方法。


  
动词
  
URI
描述
GET
/extensions/alias
返回一个扩展的细节


扩展可以定义新的数据类型,参数,动作,标题,状态,和资源。 在XML中,额外的元素和属性可以被定义。 这些元素必须在扩展的命名空间中定义。 在JSON,别名必须被使用。 卷元素是在 RS-META 命名空间中定义。 扩展头总是带有前缀 的X 其次是别名和破折号:(X-RS-META- 头1)。 参数必须带有前缀的扩展别名后面加上冒号。


   
重要
应用程序应该准备忽略包含扩展元素的响应数据。 此外,应用程序还应该验证可以延期办理提交扩展请求之前。


2.7   故障

当错误发生时,系统会返回一个HTTP错误响应代码表示错误的类型。 该系统还返回有关该故障的响应的正文的附加 ​​信息。
错误代码是为了方便响应的身体返回。 该消息部分返回一个人类可读的消息。 细节部分是可选的,并且可能包含有用的信息对于跟踪误差(如,一个堆栈跟踪)。

故障的根元素可能会因错误的类型改变。

下面的列表显示了相关的错误代码可能的故障类型。


1.4。故障类型
错误元素
相关的错误代码
预计在所有的请求
identityFault
500,400
serviceUnavailable
503
badRequest
400
unauthorized
401
overLimit
413
USERDISABLED
403
forbidden
403
itemNotFound
404
tenantConflict
409


从XML架构的角度来看,所有的API故障是基本故障类型的扩展名 identityFault 。当一个系统,结合XML到实际的类(如JAXB)的工作,一个人应该能够使用的 identityFault 作为“抓获全部”如果有个别的故障类型之间的区别没有兴趣。



3     客户端API操作
这些操作使客户能够获得API版本和扩展信息,获取身份验证令牌,并列出租户。
方法
URI
描述
GET
/ v2.0/extensions
列出可用的扩展
POST
/ v2.0/tokens
验证并生成一个令牌


3.1   列表扩展

方法
URI
描述
GET
/v2.0/extensions
列出可用的扩展


3.2   认证

方法
URI
描述
POST
/v2.0/tokens
验证并生成一个令牌

身份API是一个基于REST的Web服务。 它的入口点的所有服务API。 要访问标识的API,你必须知道它的URL。

对身份的API每个REST请求需要X-AUTH令牌头。 客户端获取此令牌,随着网址到其他服务的API,通过对具有有效凭据身份API的第一个认证。
进行身份验证,您必须提供用户ID和密码或令牌。

如果认证令牌已过期,则返回一个 401 响应代码。

如果在请求中指定的令牌已过期,这个调用会返回一个 404 响应代码。

身份API将过期标记为无效令牌。

部署决定了过期的令牌存储。


4     客户端API操作

该OpenStack的身份管理API操作使服务开发者获取和验证访问令牌,管理用户,商户,角色和服务端点。

大多数管理API调用需要进行身份验证。 无需验证唯一可用的调用是调用来发现服务-让版本信息,WADL合同,开发指导,帮助,等等-并调用来验证并获得一个令牌。

验证是通过传递一个有效的令牌在X-Auth-Tokenオト头从客户端的请求进行的。 身份的API将验证令牌有(或属于具有用户)的 管理 角色。
请参阅自述文件或系统管理员指南,如何引导身份API和创建第一个管理员。


3.1 认证报头
头类型
名称
HTTP/1.1 Request
X-Auth-Token
txfa8426a08eaf



该OpenStack的身份管理API 2.0版调用是:


方法
URI
描述
令牌操作
POST
/v2.0/tokens
验证并生成一个令牌
GET
/v2.0/tokens/{tokenId}​{?belongsTo}
验证令牌,并确认它是属于指定的租户
/v2.0/tokens/{tokenId}​{?belongsTo}
验证令牌,并确认它是属于指定的租户,出于性能
GET
/v2.0/tokens/{tokenId}/endpoints
列出与指定标记关联的终结点
用户操作
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
列出角色的指定承租人指定的用户, 不包括全局角色


5     OpenStack的身份扩展

方法
URI
描述
OS-KSADM管理员分机
OS-KSCATALOG管理员分机
OS-KSEC2管理员分机
OS-KSS3管理员分机
GET
/v2.0/users/{userId}/OS-OS-KSS3/credentials​{?marker,​limit}
清单凭据
POST
/v2.0/users/{userId}/OS-OS-KSS3/credentials​{?marker,​limit}
增加了一个凭证给用户
GET
/v2.0/users/{userId}/OS-OS-KSS3/credentials/OS-KSS3:s3Credentials
获取用户凭据
POST
/v2.0/users/{userId}/OS-OS-KSS3/credentials/OS-KSS3:s3Credentials
更新凭证
DELETE
/v2.0/users/{userId}/OS-OS-KSS3/credentials/OS-KSS3:s3Credentials
删除用户凭据
OS-KSVALIDATE管理员分机
GET
/v2.0/OS-KSVALIDATE/token/validate​{?belongsTo,​HP-IDM-serviceId}
检查该令牌是有效的,它属于指定的租户和服务ID。 返回权限为特定的客户端
/v2.0/OS-KSVALIDATE/token/validate​{?belongsTo,​HP-IDM-serviceId}
检查该令牌是有效的,它属于指定的租户和服务ID,用于性能
GET
/v2.0/OS-KSVALIDATE/token/endpoints​{?HP-IDM-serviceId}
列出与特定令牌相关联的端点


5.1   OS-KSADM管理员分机

扩展业务
4.1 认证报头
头类型
名称
HTTP/1.1Request
X-Auth-Token
txfa8426a08eaf


下面的调用是由操作系统KSADM管理员扩展支持:


方法
URI
描述
用户操作
GET
/v2.0/users
列出用户
POST
/v2.0/users
添加一个用户
POST
/v2.0/users/{userId}
更新的用户
DELETE
/v2.0/users/{userId}
删除一个用户
PUT
/v2.0/users/{userId}/OS-KSADM/enabled
允许指定的用户
GET
/v2.0/users/{userId}/roles​{?serviceId}
列出指定用户的全球角色
PUT
/v2.0/users/{userId}/roles/OS-KSADM/{roleId}
增加了一个具体的全球角色给用户
DELETE
/v2.0/users/{userId}/roles/OS-KSADM/{roleId}
会删除用户特定的全局作用
POST
/v2.0/users/{userId}/OS-KSADM/credentials
增加了一个凭证给用户
GET
/v2.0/users/{userId}/OS-KSADM/credentials
清单凭据
POST
/v2.0/users/{userId}/OS-KSADM/credentials/{credential-type}
更新凭据指定用户
DELETE
/v2.0/users/{userId}/OS-KSADM/credentials/{credential-type}
删除指定的用户凭据
GET
/v2.0/users/{userId}/OS-KSADM/credentials/{credential-type}
获取用户凭据
租客操作
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/roles​{?name}
按名称获取角色
POST
/v2.0/OS-KSADM/roles​{?name}
增加了一个角色
GET
/v2.0/OS-KSADM/roles/{roleId}
获取一个角色
DELETE
/v2.0/OS-KSADM/roles/{roleId}
删除一个角色
服务运营
GET
/v2.0/OS-KSADM/services​{?marker,​limit}
列表的服务
POST
/v2.0/OS-KSADM/services​{?marker,​limit}
添加一个服务
GET
/v2.0/OS-KSADM/services/{serviceId}
获取服务
DELETE
/v2.0/OS-KSADM/services/{serviceId}
删除一个服务


5.2   OS-KSCATALOG管理员分机

4.3 认证报头
头类型
名称
HTTP/1.1 Request
X-Auth-Token
txfa8426a08eaf


该OS-KSCATALOG延伸扩展了OpenStack的身份管理API 2.0版具有以下调用:


方法
URI
描述
端点模板操作
GET
/v2.0/OS-KSCATALOG/endpointTemplates​{?serviceId}
列出端点模板
POST
/v2.0/OS-KSCATALOG/endpointTemplates​{?serviceId}
添加端点模板
GET
/v2.0/OS-KSCATALOG/endpointTemplates/{endpointTemplateId}
获取端点模板
DELETE
/v2.0/OS-KSCATALOG/endpointTemplates/{endpointTemplateId}
删除端点模板
端点操作
GET
/v2.0/tenants/{tenantId}/OS-KSCATALOG/endpoints
列出端点的承租人
POST
/v2.0/tenants/{tenantId}/OS-KSCATALOG/endpoints
添加端点租客
GET
/v2.0/tenants/{tenantId}/OS-KSCATALOG/endpoints/{endpointId}
获取一个租户的端点
DELETE
/v2.0/tenants/{tenantId}/OS-KSCATALOG/endpoints/{endpointId}
删除从一个租户的端点


5.3   OS-KSEC2管理员分机

4.4 认证报头
头类型
名称
HTTP/1.1 Request
X-Auth-Token
txfa8426a08eaf


该OpenStack的EC2认证扩展增加了以下要求:


方法
URI
描述
用户操作
POST
/v2.0/users/{userId}/OS-KSADM/credentials
增加了一个凭证给用户
GET
/v2.0/users/{userId}/OS-KSADM/credentials//OS-KSEC2:ec2Credentials
名单按证书类型
POST
/v2.0/users/{userId}/OS-KSADM/credentials//OS-KSEC2:ec2Credentials
更新凭据指定用户
DELETE
/v2.0/users/{userId}/OS-KSADM/credentials//OS-KSEC2:ec2Credentials
删除用户凭据
GET
/v2.0/users/{userId}/OS-KSADM/credentials//OS-KSEC2:ec2Credentials
获取用户凭据


5.4   OS-KSS3管理员分机

4.5 认证报头
头类型
名称
HTTP/1.1Request
X-Auth-Token
txfa8426a08eaf



方法
URI
描述
GET
/v2.0/users/{userId}/OS-OS-KSS3/credentials​{?marker,​limit}
清单凭据
POST
/v2.0/users/{userId}/OS-OS-KSS3/credentials​{?marker,​limit}
增加了一个凭证给用户
GET
/v2.0/users/{userId}/OS-OS-KSS3/credentials/OS-KSS3:s3Credentials
获取用户凭据
POST
/v2.0/users/{userId}/OS-OS-KSS3/credentials/OS-KSS3:s3Credentials
更新凭证
DELETE
/v2.0/users/{userId}/OS-OS-KSS3/credentials/OS-KSS3:s3Credentials
删除用户凭据



5.5   OS-KSVALIDATE管理员分机

4.6 认证报头
头类型
名称
HTTP/1.1 Request
X-Auth-Token
txfa8426a08eaf



方法
URI
描述
GET
/v2.0/OS-KSVALIDATE/token/validate​{?belongsTo,​HP-IDM-serviceId}
检查该令牌是有效的,它属于指定的租户和服务ID。 返回权限为特定的客户端。
/v2.0/OS-KSVALIDATE/token/validate​{?belongsTo,​HP-IDM-serviceId}
检查该令牌是有效的,它属于指定的租户和服务ID,用于性能。
GET
/v2.0/OS-KSVALIDATE/token/endpoints​{?HP-IDM-serviceId}
列出与特定令牌相关联的端点。




6     HP扩展身份

方法
URI
描述
HP-IDM管理员分机
GET
/v2.0/tokens/{tokenId}​{?belongsTo,​HP-IDM-serviceId}
验证令牌,并且它属于指定的租户和服务。 返回有关特定客户端的权限。
/v2.0/tokens/{tokenId}​{?belongsTo,​HP-IDM-serviceId}
验证令牌,并且它属于指定的租户和服务,出于性能。


7     Rackspace公司扩展到OpenStack的身份7.1   RAX-GRPADM管理员分机


6.1 认证报头
头类型
名称
HTTP/1.1Request
X-Auth-Token
txfa8426a08eaf



新的资源是在 / RAX-GRPADM/groups,使集团的管理创建。


方法
URI
描述
集团业务
POST
/v2.0/RAX-GRPADM/groups​{?marker,​limit,​name}
添加组
GET
/v2.0/RAX-GRPADM/groups/{groupId}
获取组信息指定的组ID
PUT
/v2.0/RAX-GRPADM/groups/{groupId}
更新一组
GET
/v2.0/RAX-GRPADM/groups/{groupId}​{?marker,​limit,​marker,​limit}
列出用户为一组
DELETE
/v2.0/RAX-GRPADM/groups/{groupId}
删除一个组
PUT
/v2.0/RAX-GRPADM/groups/{groupId}/users/{userId}
将用户添加到组中
DELETE
/v2.0/RAX-GRPADM/groups/{groupId}/users/{userId}
移除一个组的用户



7.2   RAX-KSGRP管理员分机

6.2 认证报头
头类型
名称
HTTP/1.1 Request
X-Auth-Token
txfa8426a08eaf


Rackspace公司的API组服务扩展添加以下调用:


方法
URI
描述
集团业务
GET
/v2.0/users/{userId}/RAX-KSGRP
列表组指定用户


7.3   RAX-KSKEY管理员分机

6.3 认证报头
头类型
名称
HTTP/1.1 Request
X-Auth-Token
txfa8426a08eaf



在Rackspace的API密钥认证扩展增加了以下要求:


方法
URI
描述
用户操作
POST
/v2.0/users/{userId}/OS-RAX-KSKEY/credentials
增加了一个凭证给用户
GET
/v2.0/users/{userId}/OS-RAX-KSKEY/credentials/​{?marker,​limit}
清单凭据
POST
/v2.0/users/{userId}/OS-RAX-KSKEY/credentials/RAX-KSKEY:apiKeyCredentials
更新凭证
DELETE
/v2.0/users/{userId}/OS-RAX-KSKEY/credentials/RAX-KSKEY:apiKeyCredentials
删除用户凭据
GET
/v2.0/users/{userId}/OS-RAX-KSKEY/credentials/RAX-KSKEY:apiKeyCredentials
获取用户凭据


7.4   RAX-KSKEY apikeyCredentials扩展属性
该 apikeyCredentials 扩展属性支持Rackspace公司的风格的身份验证。


动词
URI
描述
POST
/tokens
验证并生成一个令牌


7.5   RAX-KSQA管理员分机

6.4 认证报头
头类型
名称
HTTP/1.1 Request
X-Auth-Token
txfa8426a08eaf


下面的操作是操作由Rackspace公司机密问题和答案延长支持列表:


方法
URI
描述
用户操作
GET
/v2.0/users/{userId}/RAX-KSQA/secretqa
获取一个机密问题和答案给指定的用户
PUT
/v2.0/users/{userId}/RAX-KSQA/secretqa
更新一个机密问题和答案给指定的用户





加微信w3aboutyun,可拉入技术爱好者群

已有(3)人评论

跳转到指定楼层
Riordon 发表于 2014-8-19 08:32:32
每天进步一点点 ....
回复

使用道具 举报

yuanjinjun87 发表于 2014-8-19 10:32:53
谢谢楼主分享,辛苦了!
回复

使用道具 举报

hb1984 发表于 2014-8-19 10:33:55
谢谢楼主分享。            
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条