环境: 客户端:负责发送请求, 服务器:负责接受请求; 认证服务器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认证实践的更多相关文章

  1. 《OpenStack部署实践》

    <OpenStack部署实践> 基本信息 作者: 张子凡 丛书名: 图灵原创 出版社:人民邮电出版社 ISBN:9787115346797 上架时间:2014-2-27 出版日期:2014 ...

  2. jfinal集成cas单点认证实践

    本示例jfinal集成cas单点认证,采用获取到登录用户session信息后,在本地站点备份一份session信息,主要做以下几个步骤: 1.站点引入响应jar包: 2.在web.xml中配置对应过滤 ...

  3. .NetCore源码阅读笔记系列之Security (二) 自定义认证实践

    通过前面对AddCookie 或者 AddOpenIdConnect 等了解,其实里面都实现了一个AuthenticationHandler<TOptions>的认证处理,接下来我们来简单 ...

  4. OpenStack openvswitch 实践

    先说下我这架构就是2个节点控制节点+计算节点,网络这采用ovs方法没有路由,就是二层打通并且可以多vlan. 网络架构图: eth0网卡走trunk,走多vlan.从dashboard上创建不同的vl ...

  5. Openstack认证过程

    01.登陆界面或命令行通过RESTful API向Keystone获取认证信息: 02.Keystone通过用户请求认证信息,并生成auth-token返回给对应的认证请求: 03.界面或命令行通过R ...

  6. 理解OpenStack认证:Keystone PKI

    原文链接: https://www.mirantis.com/blog/understanding-openstack-authentication-keystone-pki/ The latest ...

  7. Linux中SSH服务基于key认证实践

    众所周知ssh是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,它默认工作在tcp的22号端口,具体实现的软件有:openssh(centos默认安装的),dropbear.ssh协议目前 ...

  8. OpenStack实践系列①openstack简介及基础环境部署

    OpenStack实践系列①openstack简介及基础环境部署 一.OpenStack初探1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运 ...

  9. OpenStack Cinder 与各种后端存储技术的集成叙述与实践

    先说下下loop设备 loop设备及losetup命令介绍 1. loop设备介绍 在类 UNIX 系统里,loop 设备是一种伪设备(pseudo-device),或者也可以说是仿真设备.它能使我们 ...

随机推荐

  1. ChemDraw绘制苯甲酸钠的生成反应式的方法

    苯甲酸钠是苯甲酸的钠盐,就用途来说苯甲酸主要用于制作杀真菌剂,苯甲酸钠则是用于食物或软饮料中的主要商品防腐剂,其防腐最佳PH是2.5-4.0,苯甲酸钠的亲油性也很大,易穿透细胞膜进入细胞体内.苯甲酸钠 ...

  2. java和C#异常处理的差异

    Java异常处理和C#非常相似,不过Java中支持强制异常处理方式, 一旦方法加入了throws关键字,那么调用这个方法的类就必须加上try和catch进行异常处理, 如果不处理(没有try catc ...

  3. 0、手把手教React Native实战之开山篇

    ##作者简介 东方耀    Android开发   RN技术   facebook   github     android ios  原生开发   react reactjs nodejs 前端   ...

  4. Python学习-一个简单的计时器

    在实际开发中,往往想要计算一段代码执行多长时间,以下我将该功能写入到一个函数里面,仅仅要在每一个函数前面调用该函数就可以,见以下代码: #------------------------------- ...

  5. fnt 图字原理

    摘自:http://blog.csdn.net/wzq9706/article/details/8188256 首先要介绍一下,图字是怎么来的?其实这个很早很早了,记得80后在95年开始玩DOS下的仙 ...

  6. C#操作AD及Exchange Server总结(二)

    上一节C#操作AD及Exchange Server总结(一)写了对AD的操作,新建AD用户后,通常都需要为此用户开启Exchange邮箱,接下来写如何远程操作Exchange. 三.对Exchange ...

  7. 巨蟒python全栈开发flask7 语音识别升级版&&mongoDB

    1.web简陋版玩具 首先,复制上一节课的内容,将其中的语音文件删除掉, 放入三个文件,然后,我们需要在app写入下面的内容 下图是需要修改的地方: Recorder_ok.js是一个web录音的工具 ...

  8. MFC DLL获取当前路径

    .首先定义此获取模块的静态方法 #if _MSC_VER >= 1300 // for VC 7.0 // from ATL 7.0 sources #ifndef _delayimp_h ex ...

  9. 【我的Android进阶之旅】 Android Studio插件之Jenkins插件介绍

    一Jenkins插件功能介绍 1Jenkins任务列表 2切换Jenkins分组 3构建Jenkins任务 4进入构建Jenkins任务的页面 5进入最后一次构建Jenkins任务的页面 6增加Jen ...

  10. 使用jQuery重用form表单并异步提交到其它action

    在做页面开发的时候,有时候要重用表单的数据,并异步请求提交到其它的链接中,这个时候就能够使用jquery去改动表单的action值(记得使用后改动回来).并调用submit方法,当然后台的链接acti ...