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. Custom Sublime Text Build Systems For Popular Tools And Languages

    Sublime Text is currently the text editor of choice for a number of developers in the open-source co ...

  2. BleedTree动画混合树[Unity]

    Unity在中土大陆的大肆推广能从广泛的中文翻译资料中看出.所以,手册才是王道. 游戏动画中的一个常见任务是在两个或更多相似运动之间混合.最佳的已知示例可能是根据角色速度混合行走和奔跑动画.另一个示例 ...

  3. vue 实现右键功能

    @contextmenu.prevent="rightShow()" v-on:contextmenu.prevent = "事件名称"

  4. JS 实现日期信息增加年数,月数,天数

    function DateAdd(interval, number, date) { /* * 功能:实现JSScript的DateAdd功能. * 参数:interval,字符串表达式,表示要添加的 ...

  5. uboot命令实现举例

    之前一直在想,为什么没有人出一个完全从零写uboot和移植剪裁内核的教程,后来发现,确实这样的教程十分不容易,还有就是我们也没有必要花那么多时间去做别人已经做好的事情,所以,一般而言我们只用管怎么实现 ...

  6. java 泛型详解-绝对是对泛型方法讲解

    Reference:  http://blog.csdn.net/s10461/article/details/53941091 1. 概述 泛型在java中有很重要的地位,在面向对象编程及各种设计模 ...

  7. win8中完成进度

    public sealed partial class WorkItem : Page { private IAsyncAction _threadPoolWorkItem; private Manu ...

  8. [转]Oracle 树操作(select…start with…connect by…prior)

    原文地址:https://www.cnblogs.com/colder/p/4838574.html oracle树查询的最重要的就是select…start with…connect by…prio ...

  9. 使用EGit插件将Eclipse现有项目分享到git@osc

    . . . . . 程序员一定要养成使用版本管理工具的好习惯,即使是自己一个人开发的项目也要加入到版本管理工具中.使用版本管理工具主要有两个好处:一个是更好的管理多个副本,这个优势不用说了:另一个就是 ...

  10. [uart]linux uart应用层配置

    http://www.raviyp.com/embedded/189-serial-port-programming-in-linux-using-c-working-code