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. SolrCloud基本过程

    转:http://www.data321.com/yunjisuan/20160514880/SolrZhiJieDuQuZKZhongDePeiZhiXin SolrCloud之分布式索引及与Zoo ...

  2. Asp.Net MVC分页PageList

    1.mvc网站右键->管理nuget程序包->安装下边两个组件 2.controller public dbModel db = new dbModel(); public ActionR ...

  3. recv用TCP和TUDP下的区别

    recv是可以用在UDP套接字上的,前提是该套接字调用过bind或者connect,那它用在TCP和UDP套接字上时有什么区别呢? 下面做一个测试,分别使用UDP.TCP实现一对C/S.客户端发送12 ...

  4. s3c2440——按键中断

    s3c2440的异常向量表: IRQ中断地址是0x18.所以,根据之前的异常处理方式,我们编写启动文件: 为什么需要lr减4,可以参考这篇文章:http://blog.csdn.net/zzsfqiu ...

  5. django HttpResponse对象

    HttpResponse对象 概述: 作用:给浏览器返回数据 HttpRequest对象是由Django创建的,HttpResponse对象是由程序员创建 用法: 不用模板,直接返回数据 语句示例:r ...

  6. (转载)跟我一起学习VIM - The Life Changing Editor

    原文: http://ju.outofmemory.cn/entry/79671 前两天同事让我在小组内部分享一下VIM,于是我花了一点时间写了个简短的教程.虽然准备有限,但分享过程中大家大多带着一种 ...

  7. kylin的状态栏(启动器)改成ubuntu之前的样子

    ylin的状态栏(启动器)改成ubuntu之前的样子,ubuntu是在左边的,kylin在底部.占空间. 执行命令 gsettings set com.canonical.Unity.Launcher ...

  8. ssh 地址

    structs2http://struts.apache.org/download.cgi spring hibernate http://hibernate.org/orm/downloads/

  9. ARKit从入门到精通(7)-ARCamera介绍

    ARCamera是一个相机,它是连接虚拟场景与现实场景之间的枢纽.在ARKit中,它是捕捉现实图像的相机,在SceneKit中它又是3D虚拟世界中的相机.(一般第一人称3D游戏,主角其实就是一个3D相 ...

  10. spring data jpa的update操作

    简介 使用jpa进行update操作主要有两种方式: 1.调用保存实体的方法 1)保存一个实体:repository.save(T entity) 2)保存多个实体:repository.save(I ...