Keystone Fernet tokens
FENET是一种安全的消息传递格式,已被国外的一些公司用于API token中。解决了OpenStack面临的许多相同问题。它们的非持久的、轻量级的特性可以降低运行云所需的开销。
fernet_token格式如下:
gAAAAABaVhKmk-inDnXQjDU-w6bw4BHhVhTAIOIspvGV6vZXHh8P9Kd6FMYdXeR6R8z_JfccBZxyTfooHvomBGhsrodIhWpAkL3lf-bqsAxr9byzPPQyyoHfp_IlOh2OgSngyt9NFVu39Sj4CM_vcInpBOCdMzMeGT7D0BRpyDC-6ziRpTmBlak
|
非持久化:不像UUID的token,fernet tokens 不需要被持久化到数据库。
是的!这意味着这个token将是永远是可以用的:
> SELECT * FROM `token`;
Empty set ( 0.00 sec)
|
轻量级:与 PKI token 相比,他们比较短,偏向于最小的身份信息和动态授权环境。
它们通常在180到240字节的范围内。从客户端的角度来看,您可以将它们完全视为 UUID token。
对称加密:Fernet 使用 AES-CBC 加密,并使用 SHA256 HMAC 进行签名。
简而言之,OpenStack的身份验证和授权元数据都被打包成一个包,然后将其加密并签名为 Fernet token。 OpenStack 支持 三阶段 密钥循环模型,能有效支持密钥的轮询切换和替代。
Fernet tokens 包含些什么?
Fernet tokens 包含最少的身份和授权信息:刚好可以让 keystone 实现完整的 token 验证。
在一般情况下(project-scoped token),一个token 会包含一个user id 和 一个 project id,以及一些元数据,如令牌创建时间戳,token时间周期,审计ID和认证方法。 domain-scoped token 会包含 domain ID而不是 project ID。 基于信任的token 将包含信任标识。 基于联合的 token 将包含 有关联盟本身的信息。
除了 token 创建时间戳以外,所有这些都是加密的,因为它是 fernet token 加密消息 的一部分。 fernet 做为包含这些信息的载体,fernet的更多细节可以参考这个https://github.com/fernet/spec/blob/master/Spec.md。
如果你想查看一个 fernet 内容,在打包和解包中你将会体会到fernet token 有多复杂和精密。
Fernet令牌有多大?
下面可以看一个 project-scoped Fernet token:
gAAAAABaVhKmk-inDnXQjDU-w6bw4BHhVhTAIOIspvGV6vZXHh8P9Kd6FMYdXeR6R8z_JfccBZxyTfooHvomBGhsrodIhWpAkL3lf-bqsAxr9byzPPQyyoHfp_IlOh2OgSngyt9NFVu39Sj4CM_vcInpBOCdMzMeGT7D0BRpyDC-6ziRpTmBlak
|
上面就只有186个字节,通常都会控制在255字节内。虽然255字节没有硬性限制,并且很长的token虽然存储到数据库里不是什么问题,但是长的 token 用户体验不好。 也有不好的事情,比如一些非UUID的用户可能会有额外的安全风险。
更另人吃惊的是,如果一个用户属于多个组,有可能是属于无穷多的组的时候,这个fernet token就也会相应的很庞大,不过现实私有云环境中,也不太可能一个用户属于3个组以上。
不过如果你将user 分配到二个不同的组,你很快就会看到 Fernet token 的长度迅速增加。
Fernet令牌可以离线验证吗?
可以进行一些离线验证,例如验证 token 是否是正确的 Fernet token,并验证创建日期。 但是,如果没有签名密钥或加密密钥,就不能离线验证了。
性能怎么样?
Fernet token 的性能比 UUID token 快 85%,比 PKI token 快89%。
怎么配置并使用 Fernet?
只需要以下几步。
1,通过更改 keystone.conf 中[token]下的 provider:
[token]
provider = fernet
|
2,初始化密钥库:
mkdir /etc/keystone/fernet-keys/
keystone-manage fernet_setup
|
初始化密钥库后,会在 key_repository 里生成一对密钥:一个staged key 用于解密tokens,一个 primary key 用于加密token。
3,在部署多节点 keystone 集群时,这时候需要将 key_repository /etc/keystone/fernet-keys/ 里的目录和文件 复制到每个其他的keystone节点相对应的目录上。这样确实可以用 fernet token 可以在不同的节点上使用相当的密钥进行解密。
Keystone Fernet tokens相关推荐
- MySql__为用户赋于主从同步的权限
MySql__为用户赋于主从同步的权限 在配置Otter的时候报错: CanalParseException: command : 'show master status' has an error! ...
- openstack学习笔记之keystone
keystone 作为 OpenStack 的基础支持服务,Keystone 做下面这几件事情: --管理用户及其权限 --维护 OpenStack Services 的 Endpoint --Aut ...
- 源码安装OpenStack Ussuri ---Keystone篇
源码安装OpenStack Ussuri -Keystone篇 前面我们进行了准备的操作,现在开始源码安装Keystone ,Keystone源码已经上传到我的gitee上面了,下面我们直接用这上面的 ...
- [转] OpenStack Kilo 更新日志
OpenStack 2015.1.0 (Kilo)更新日志 原文: https://wiki.openstack.org/wiki/ReleaseNotes/Kilo/zh-hans 目录 [隐藏] ...
- OpenStack双网卡、多节点搭建
1.新建三台虚拟机(controller.computer.object) 一.配置三个源: 1.Base源 CentOS-Base.repo 阿里源 wget -O /etc/yum.repos. ...
- OpenStack 2015.1.0 (Kilo)更新日志
看到好东西,就分享一下.遗憾的是不在csdn,只有复制过来了. OpenStack对象存储(Swift)[edit]新功能[edit]纠删码(beta)[edit] Swift现在支持纠删码(EC)存 ...
- OpenStack Train Magnum部署Kubernetes(1)--部署OpenStack Train
基于Packstack部署OpenStack Train版本 部署环境 操作系统:CentOS Linux release 7.7.1908 OpenStack:Train PackStack:ope ...
- OpenStack Queens版搭建详解
目录 OpenStack Queens版搭建详解 1.基础环境配置 1.2 节点网络规划 1.3 关闭防火墙 1.4 配置yum源 1.5 配置节点IP 1.6 配置主机名 1.7 配置主机名解析(h ...
- OpenStack Stein版搭建详解
目录 .基础环境配置 1.1 节点硬件规划 1.2 节点网络规划 1.3 关闭防火墙 1.4 配置yum源 1.5 配置节点IP 1.6 配置主机名 1.7 配置主机名解析 1.8 配置NTP服务 2 ...
最新文章
- dhtmlxgrid表格笔记
- Python基础教程:绑定方法和非绑定详细用法
- JDK1.10+scala环境的搭建之linux环境(centos6.9)
- Django Rest Framework 视图和路由
- 如何配置android的adb环境变量,如何配置adb环境变量?win7配置adb环境变量的方法...
- linux rac 查询ip,你知道RAC怎么增加管理IP地址吗?
- 无法连接远程计算机,远程桌面由于以下原因之一无法连接到远程计算机
- 从超大规模云服务提供商处学习效率
- 关注Linux防火墙之介绍iptables与ufw命令
- 灵格斯词霸 2.6.3 - 小窗口, 大世界
- vs2015编译纯ASM文件
- word如何在任意页开始添加页码
- Win 10系统截图的7种方式【简单实用】
- hive优化——并行执行
- Feed Ratios
- 使用C加加实现计算器功能。可以实现加减乘除。需要用到内联。函数重载。new运算符。缺省参数
- 三角形黑盒测试-Java Swing
- c语言中怎么画直线,ps如何画直线
【操作流程】
- Labview移位寄存器理解(例子说明)
- 诚心希望大家可以关注一下这个游戏公司:飞鱼科技
热门文章
- pix2pix鼻祖——《Image-to-Image Translation with Conditional Adversarial Networks》论文解析
- vue3 如何定义全局变量
- 【常用算法】判断一个字符是否是字母
- [洛谷]P4158 [SCOI2009]粉刷匠 (#线性dp+背包dp)
- 在线流程图 思维导图
- java判断对象已死_JVM判断对象已死亡?
- linux服务器查看公网IP信息(curl)
- 自举升压电路解析(电荷泵工作原理)
- 自动化的未来是什么?
- oracle 存储过程举例,oracle存储过程举例讲解