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. [开源项目-MyBean轻量级配置框架] 使用MyBean快速搭建分模块的应用程序(主页面的TAB)(DLL-MDI)

    [概述] 抱歉由于上次开源比较匆忙,没有来的及做一个DEMO,里面也有些垃圾的文件没有及时清理.DEMO其实昨天晚上已经调通.相关说明文档今天晚上才说明好,欢迎大家继续关注和交流,和大家一起分享我10 ...

  2. 理解Netty中的零拷贝(Zero-Copy)机制【转】

    理解零拷贝 零拷贝是Netty的重要特性之一,而究竟什么是零拷贝呢? WIKI中对其有如下定义: “Zero-copy” describes computer operations in which ...

  3. java基础篇---正则表达式

    正则表达式在许多语言,例如Perl.PHP.Python.JavaScript和JScript,都支持用正则表达式处理文本,一些文本编辑器用正则表达式实现高级“搜索-替换”功能. 正则表达式是一种可以 ...

  4. [转]bootstrapTable refresh 方法使用简单举例

    原文地址:https://blog.csdn.net/lanyang123456/article/details/55805478 本文就bootstrapTable refresh 方法如何传递参数 ...

  5. git pull出现There is no tracking information for the current branch

    使用git pull 或者 git push 的时候报错 gitThere is no tracking information for the current branch. Please spec ...

  6. ython strip lstrip rstrip使用方法

    Python中的strip用于去除字符串的首尾字符,同理,lstrip用于去除左边的字符,rstrip用于去除右边的字符. 这三个函数都可传入一个参数,指定要去除的首尾字符. 需要注意的是,传入的是一 ...

  7. [转]TF-IDF与余弦相似性的应用(一):自动提取关键词

    这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题. 有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工干预,请问怎样才 ...

  8. 阻止SPY++类似的程序捕捉软件窗口

    我以前用Spy++能轻易捕捉360软件界面,除了一些应用DHTML制作的窗体.昨天我再用Spy++捕捉的时候捕捉不到了,甚至连最外围的对话框都捕捉不到,显然是做了类似拦截API的处理.下面我也模拟一下 ...

  9. Activiti Modeler初探实践

    以下内容对实践activiti很有用,不过我用的不是github下载的源码包编译出来的war包,不知道什么原因我打出来的包会有点问题.不过这不重要,换个地方下载来源就行,下载网址: http://dl ...

  10. openvpn之server配置篇

    openvpn server的配置路径下有大约如下文件: [root@localhost server]# ll total -rw-r-----. nobody nobody Sep ca.crt ...