Keystone身份API简介  

  Keystone提供REST风格的API, 客户端可以通过HTTP方法和URL操作资源. Keystone有两个主要版本的API, 以及构建在这些核心API上的一些API扩展. 这两个主要版本的API分别是第二版身份API和第三版身份API. 查阅所有的Keystone身份API, 请移步这里.

  之所以没有"第一版"身份API是因为1.x系列的API是Rackspace公司为自己的公有云产品开发的简单原型, 这一系列的身份API早于OpenStack项目推出, 在Keystone中已经看不到它们了. 随着OpenStack的出现, Keystone逐渐成为Rackspace的公有云, Nova, Swift等产品中已实现的身份认证和多租户授权模型的超集, 2.0版的身份API也就由此诞生.

  OpenStack官方推荐使用第三版身份API, 第三版身份API是第二版身份API功能的超集, 提供了更为一致的开发者体验, Keystone社区正在逐渐弃用并将会最终减少(乃至放弃)对第二版身份API的支持. 此外, 第三版身份API引入了"域"(Domain)的概念. 域作为高级容器担当用户, 项目(Projects)等实体的命名空间, 使得身份管理变得更加灵活, 也改进了第二版身份API中不记名令牌(Bearer Token)出现在URL中的安全隐患.

  第三版与第二版身份API的显著区别包括:

  - 第二版身份API中的"租户"(tenant)现在改称"项目"(project).

  - 身份认证方法 (password, token等) 如今需要明确指明.

  - 用户和项目的命名空间是他们所属的域(默认id = "default"), 这个id为“default”的域在Keystone中默认存在, 成为所有第二版身份API的命名空间(由于那时没有引入"域"的概念). 你也可以引用不在这个默认的域的命名空间中的用户和项目, 但是这些功能是第二版身份API所不支持的.

  - 在第三版的身份API中, 令牌作为响应头的X-Subject-Token字段由Keystone服务返还给你, 而不是存放于响应体中. 当你需要向其他的服务证明自己的身份时, 仍然将你获得的令牌放置在请求头的X-Auth-Token字段.

如何使用第三版身份API?

一. 在Keystone服务上部署

  为了使用第三版的身份API, 先要配置Keystone服务端向外开放必要的接口.

  由于最新的Keystone已经实现并继续开发第三版身份API, 我们只需要在Paste部署配置中进行简单的配置即可. Keystone自带的Paste配置模板是keystone/etc/keystone-paste.ini, 我们这里以这个文件为例, 其中包括了第三版身份API的Paste应用和管道.

     首先定义一个第三版API对应的Paste应用, keystone-paste.ini文件中参考了默认的工厂函数, 也可以参照Keystone的开发规范自己实现这个Paste应用:
 
[app:service_v3]
paste.app_factory = keystone.service:v3_app_factory
     
  接着定义一个Paste管道,以刚刚定义的应用结尾:
 
[pipeline:api_v3]
pipeline = ... service_v3
     
  上面的"..."可以替换成任何你想要在第三版API服务前运行的中间件, 你可以采取keystone-paste.ini中默认设置的中间件, 也可以按照你的需求自己修改或定制中间件.
  最后, 将上面的Paste管道添加到至少一个组合应用中(通常是在[composite:main] 和 [composite:admin]中都添加), 例如:
 
[composite:main]
use = egg:Paste#urlmap
/v2.0 = public_api
/v3 = api_v3
... [composite:admin]
use = egg:Paste#urlmap
/v2.0 = admin_api
/v3 = api_v3
...

  这些Paste配置信息提供在模板keystone-paste.ini文件中, 说明Keystone默认配置为同时支持第二版和第三版的身份API.

  如果打算同时向外提供第二版和第三版的身份API, 那么在配置Keystone的服务目录时需要注意, 此时理想的方式是将无版本的Keystone端点开放给用户, 如(注意这些URL中并不包含任何 /v2.0/ 或 /v3/):
- Service (type: identity)
    - Endpoint (interface: public, URL: http://identity:5000/)
    - Endpoint (interface: admin, URL: http://identity:35357/)
 
二. 客户端的建议
  1. Python客户端
  Keystone社区为Python开发者提供了 "python-keystoneclient" 库实现身份API的调用. 这个库支持所有身份API调用, 调用python-keystoneclient库应该是迁移到第三版身份API最直接的方法.
 
  2. 非Python客户端
  Keystone提供REST风格的身份API, 非Python开发者可以通过查阅第三版身份API的参考手册来修改自己的客户端应用.
 
  3. 命令行用户
  OpenStack社区开发了旨在整合所有OpenStack服务命令行客户端的"python-openstackclient", 该项目提供了基于第三版身份API的命令行工具, 用户可以方便地使用该CLI工具与Keystone服务交互. 注意尽管"python-keystoneclient" 也提供了与Keystone服务进行交互的命令行工具, 但是它只支持第二版的身份API, Keystone社区也不会升级 "python-keystoneclient" 命令行工具支持的API版本.
  因此如果使用官方提供的工具调用第三版身份API, 理想的Python客户端调用 "python-keystoneclient" 库, 命令行工具则采用"python-openstackclient".

Keystone API的更多相关文章

  1. 使用openstackclient调用Keystone v3 API

    本文内容属于个人原创,转载务必注明出处:  http://www.cnblogs.com/Security-Darren/p/4138945.html 考虑到Keystone社区逐渐弃用第二版身份AP ...

  2. openstack Rocky系列之keystone:(二)keystone中API注册

    主要说一下initialize_application中的application_factory def loadapp(): app = application.application_factor ...

  3. 【openStack】Libcloud 如何支持 keystone V3?

    Examples This section includes some examples which show how to use the newly available functionality ...

  4. 探索 OpenStack 之(13):研究 Keystone

    Keystone 是 OpenStack Identity Service 的项目名称.本文就试着尽可能深入地研究 Keystone. 1. Keystone 的功能 做为 OpenStack 云系统 ...

  5. keystone命令与client接口学习

    keystone学习 ------------------ Keystone(OpenStack Identity Service)是OpenStack框架中,负责身份验证.服务规则和服务令牌的功能, ...

  6. keystone系列二:keystone源码分析

    六 keystone架构 6.1 Keystone API Keystone API与Openstack其他服务的API类似,也是基于ReSTFul HTTP实现的. Keystone API划分为A ...

  7. openstack之keystone

    一.什么是keystone 用于为openstack家族中的其它组件成员提供统一的认证服务,包括身份认证.令牌发放和校验.服务列表.用户权限定义等: 基本概念: 用户User:用于身份认证.一个用户可 ...

  8. [转]Setting Keystone v3 domains

    http://www.florentflament.com/blog/setting-keystone-v3-domains.html The Openstack Identity v3 API, p ...

  9. keystone系列五:keystone源码分析

    六 keystone架构 6.1 Keystone API Keystone API与Openstack其他服务的API类似,也是基于ReSTFul HTTP实现的. Keystone API划分为A ...

随机推荐

  1. LeetCode: Search in Rotated Sorted Array II 解题报告

    Search in Rotated Sorted Array II Follow up for "LeetCode: Search in Rotated Sorted Array 解题报告& ...

  2. 【机器学习】粗糙集(Rough Set Approach)

    粗糙集理论是一种研究不精确,不确定性知识的数学工具. 粗糙集理论的知识表达方式一般采用信息表或称为信息系统的形式,它可以表现为四元有序组K=(U,A,V,P).其中U为对象的全体,即论域:A是属性全体 ...

  3. 综合出现NSScanner: nil string argument libc++abi.dylib: terminat错误的解决方案

    在开发中出现了这个错误,断点查找很久,没找到问题所在的代码,google下,发现了下面这几点会产生这个错误: 首先,顾名思义,错误原因是我们在调用某个方法的时候,传入了一个空字符串(注意区别于字符串内 ...

  4. Java基础篇--字符串处理(StringBuffer)

    字符串处理 在Java中最常将字符串作为String类型对象来处理.同时String中也提供了很多操作字符串的函数(可自行查阅资料),而本篇将介绍StringBuffer如何操作字符串. String ...

  5. WPF中自定义路由事件

    public class MyButtonSimple: Button { // Create a custom routed event by first registering a RoutedE ...

  6. Android——BroadcastReceiver

    注释:一般广播不会被阻断,有序广播则会被阻断 注释:这是用动态注册的广播,必须要解绑 xml <?xml version="1.0" encoding="utf-8 ...

  7. 俞军的PM12条

     俞军的PM12条:1.PM首先是用户2.站在用户角度看待问题3.用户体验是一个完整的过程4.追求效果,不做没用的东西5.发现需求,而不是创造需求6.决定不做什么,往往比决定做什么更重要7.用户是很难 ...

  8. [开发笔记]-ASP.NET项目在IIS上使用虚拟目录

    说一下我想要实现的效果: 假如我做一个图片展示类的网站,或者其他需要用户上传文件的网站,需要将用户上传的文件保存到一个Uploadfiles文件夹下,一般我们在做项目时用户上传的文件都是保存在网站项目 ...

  9. Anaconda下载(改变了镜像路径,下载速度很快!!!)

    Anaconda下载(改变了镜像路径,下载速度很快!!!) 使用conda install 包名 安装需要的Python非常方便,但是官方的服务器在国外,因此下载速度很慢,国内清华大学提供了Anaco ...

  10. 汉字转拼音首字母的java实现

    工作中经常会遇到的一些排序问题,比如 按汉字的拼音首字母排序,比如人名排序等,就要用到下面的方法了,思路: 1. 获得汉字 2. 将汉字转换成首字母,并记录下(必要时保存到数据库) 3. 按首字母进行 ...