openstack认证实践
环境: 客户端:负责发送请求, 服务器:负责接受请求; 认证服务器keystone:负责认证
具体认证步骤:
1、客户端首先进行签名计算,将得到的签名字符串作为authorization发给keystone。利用secretkey计算签名,签名中包括:accesskey,时间戳,主机IP、端口,要找keystone进行校验的请求API,由于需要注意,keystone要求时间戳为UTC格式,所以需要转换为UTC,否则导致最后keystone验签失败,返回400 Bad Request,相关代码如下:
    utc_time = datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ')
    host = "10.0.0.3:8787"  # IP为客户端要访问的服务器的IP
    authorization = {'version': 'auth-v1',
                     'access': accesskey,
                     'timestamp': utc_time,
                     'period': '10800',
                     'signedheaders': '',
                     'signature': 'SIGNATURE_SPACE_HOLDER'}
    request = {
            'method': 'POST',
            'uri': '/data/add',
            'params': {
                },
            'headers': {
                'x-date': utc_time,
                'Host': host,
                }
            }
之后,用户将计算好的签名插入到API请求头部,访问服务器,计算好的签名示例如下:
x-date:2017-05-31T05:06:30Z
Authorization:auth-v1/2d6e969a81384d03848708bbb4fb0bca/2017-05-31T05:06:30Z/1800/host;x-date/128709e9cd3b3ef751cff70028851641cca8ef3262f6e9d06514ac243b839a54
Content-Type:application/json
2、服务器收到客户端请求后,首先到keystone申请token,原因是keystone要求服务携带一个表征服务身份的token,放在X-Auth-Token请求头中,token有效期一般为半小时,发送的请求为(具体的参数是keystone要求的,必须严格一致,否则导致token不对)
 params = json.dumps({
          "auth": {
              "identity": {
                  "methods": [
                      "password"
                  ],
                  "password": {
                      "user": {
                          "domain": {
                              "id": "default"
                          },
                          "name": username,
                          "password": password
                      }
                  }
              },
          "scope": {
             "domain": {
                 "id": "default"
             }
         }
         },
     })
请求响应中x-token就是需要的token
最后,服务器将客户的authorization,申请到的token,以及请求的信息Method(GET), Uri(/data/add); host(服务器IP)提交到keystone来进行验签
3、keystone基于请求信息进行签名的验算,向服务返回验签过通与否,如果验证通过,服务器执行用户请求的操作
openstack认证实践的更多相关文章
- 《OpenStack部署实践》
		<OpenStack部署实践> 基本信息 作者: 张子凡 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115346797 上架时间:2014-2-27 出版日期:2014 ... 
- jfinal集成cas单点认证实践
		本示例jfinal集成cas单点认证,采用获取到登录用户session信息后,在本地站点备份一份session信息,主要做以下几个步骤: 1.站点引入响应jar包: 2.在web.xml中配置对应过滤 ... 
- .NetCore源码阅读笔记系列之Security (二) 自定义认证实践
		通过前面对AddCookie 或者 AddOpenIdConnect 等了解,其实里面都实现了一个AuthenticationHandler<TOptions>的认证处理,接下来我们来简单 ... 
- OpenStack openvswitch 实践
		先说下我这架构就是2个节点控制节点+计算节点,网络这采用ovs方法没有路由,就是二层打通并且可以多vlan. 网络架构图: eth0网卡走trunk,走多vlan.从dashboard上创建不同的vl ... 
- Openstack认证过程
		01.登陆界面或命令行通过RESTful API向Keystone获取认证信息: 02.Keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求: 03.界面或命令行通过R ... 
- 理解OpenStack认证:Keystone PKI
		原文链接: https://www.mirantis.com/blog/understanding-openstack-authentication-keystone-pki/ The latest ... 
- Linux中SSH服务基于key认证实践
		众所周知ssh是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,它默认工作在tcp的22号端口,具体实现的软件有:openssh(centos默认安装的),dropbear.ssh协议目前 ... 
- OpenStack实践系列①openstack简介及基础环境部署
		OpenStack实践系列①openstack简介及基础环境部署 一.OpenStack初探1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运 ... 
- OpenStack Cinder 与各种后端存储技术的集成叙述与实践
		先说下下loop设备 loop设备及losetup命令介绍 1. loop设备介绍 在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备.它能使我们 ... 
随机推荐
- 化学绘图软件ChemDraw真的什么都能干!
			今天要介绍的就是一款无所不能的化学绘图软件——ChemDraw,绘制平面化学结构.生成立体化学模型.查询化学信息.编写化学脚本.计算化学数据等等,堪称化学界的必备神器. 化学软件ChemDraw免费获 ... 
- 【分享】Windows日志查看工具分享
			在Linux下查看日志,使用tail.grep.find等命令还比较方便,后来需要在Windows中处理一些问题,发现缺少类似的功能,比如tailf实时输出,于是在网上收集了一些相关的小工具,希望能够 ... 
- html空格字符
			一.使用全角空格IDEOGRAPHIC SPACE---- Encodings HTML Entity (decimal) HTML Entity (hex) How to type in ... 
- 免费iOS第三方推送工具Urban Airship使用教程
			本文转载至 http://blog.csdn.net/mamong/article/details/8542404 http://www.dapps.net/dev/iphone/ios-free ... 
- zoj3497(经典矩阵乘法)
			原以为是用搜索做的题,想了好久都无法想到一个高效正确的解法. 后面发现竟然这就是矩阵的应用! 碉堡! 给定一个有向图,问从A点恰好走k步(允许重复经过边)到达B点的方案数mod p的值 ——选自ma ... 
- [LintCode] 带最小值操作的栈
			class MinStack { public: MinStack() { // do initialization if necessary } void push(int number) { // ... 
- 解决Sublime_Text不能安装插件的方法
			channel.json文件请到下面的网址下载: http://download.csdn.net/detail/xiaoming11654187/9866213 1.先将channel.json文件 ... 
- delphi弹出信息框大全(转载)
			1. 警告信息框 MessageBox(Handle,'警告信息框','警告信息框',MB_ICONWARNING); 2.疑问信息框 MessageBox(Handle,'疑问信息框','疑问信息框 ... 
- 什么是Python?Python的设计哲学?如何获取/升级Python?
			Python? Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/) Python的创始人为吉多·范罗苏姆(Guido van Rossum). 1989年的圣诞节期间,吉多· ... 
- Storm-源码分析- bolt (backtype.storm.task)
			Bolt关键的接口为execute, Tuple的真正处理逻辑, 通过OutputCollector.emit发出新的tuples, 调用ack或fail处理的tuple /** * An IBolt ... 
