`
gaojingsong
  • 浏览: 1210161 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【理解Keystone的四种Token】

阅读更多

通俗的讲,token 是用户的一种凭证,需拿正确的用户名/密码向 Keystone 申请才能得到。如果用户每次都采用用户名/密码访问 OpenStack API,容易泄露用户信息,带来安全隐患。所以 OpenStack 要求用户访问其 API 前,必须先获取 token,然后用 token 作为用户凭据访问 OpenStack API。 



UUID类型

D 版本时,仅有 UUID 类型的 Token,UUID token 简单易用,却容易给 Keystone 带来性能问题

UUID token 是长度固定为 32 Byte 的随机字符串,由 uuid.uuid4().hex 生成。

 

PKI类型

在阐述 PKI(Public Key Infrastruction) token 前,让我们简单的回顾 公开密钥加密(public-key cryptography) 和 数字签名 。公开密钥加密,也称为非对称加密(asymmetric cryptography,加密密钥和解密密钥不相同),在这种密码学方法中,需要一对密钥,分别为公钥(Public Key)和私钥(Private Key),公钥是公开的,私钥是非公开,需用户妥善保管,和 UUID 相比,PKI token 携带更多用户信息的同时还附上了数字签名,以支持本地认证,从而避免了步骤 4

 

PKIZ 类型

PKIZ 在 PKI 的基础上做了压缩处理,但是压缩的效果极其有限,一般情况下,压缩后的大小为 PKI token 的 90 % 左右,所以 PKIZ 不能友好的解决 token size 太大问题。

 

 Fernet token类型

社区提出了 Fernet token ,它采用 cryptography 对称加密库(symmetric cryptography,加密密钥和解密密钥相同) 加密 token,具体由 AES-CBC 加密和散列函数 SHA256 签名。 Fernet 是专为 API token 设计的一种轻量级安全消息格式,不需要存储于数据库,减少了磁盘的 IO,带来了一定的 性能提升 。为了提高安全性,需要采用 Key Rotation 更换密钥。

几种常用的认证机制

HTTP Basic Auth

HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可,但由于有把用户名密码暴露给第三方客户端的风险,在生产环境下被使用的越来越少。因此,在开发对外开放的RESTful API时,尽量避免采用HTTP Basic Auth

OAuth

OAuth(开放授权)是一个开放的授权标准,允许用户让第三方应用访问该用户在某一web服务上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的第三方系统(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容
下面是OAuth2.0的流程:

这种基于OAuth的认证机制适用于个人消费者类的互联网产品,如社交类APP等应用,但是不太适合拥有自有认证权限管理的企业应用;

Cookie Auth

Cookie认证机制就是为一次请求认证在服务端创建一个Session对象,同时在客户端的浏览器端创建了一个Cookie对象;通过客户端带上来Cookie对象来与服务器端的session对象匹配来实现状态管理的。默认的,当我们关闭浏览器的时候,cookie会被删除。但可以通过修改cookie 的expire time使cookie在一定时间内有效;

Token Auth

Token Auth的优点

Token机制相对于Cookie机制又有什么好处呢?

  • 支持跨域访问: Cookie是不允许垮域访问的,这一点对Token机制是不存在的,前提是传输的用户认证信息通过HTTP头传输.
  • 无状态(也称:服务端可扩展行):Token机制在服务端不需要存储session信息,因为Token 自身包含了所有登录用户的信息,只需要在客户端的cookie或本地介质存储状态信息.
  • 更适用CDN: 可以通过内容分发网络请求你服务端的所有资料(如:javascript,HTML,图片等),而你的服务端只要提供API即可.
  • 去耦: 不需要绑定到一个特定的身份验证方案。Token可以在任何地方生成,只要在你的API被调用的时候,你可以进行Token生成调用即可.
  • 更适用于移动应用: 当你的客户端是一个原生平台(iOS, Android,Windows 8等)时,Cookie是不被支持的(你需要通过Cookie容器进行处理),这时采用Token认证机制就会简单得多。
  • CSRF:因为不再依赖于Cookie,所以你就不需要考虑对CSRF(跨站请求伪造)的防范。
  • 性能: 一次网络往返时间(通过数据库查询session信息)总比做一次HMACSHA256计算 的Token验证和解析要费时得多.
  • 不需要为登录页面做特殊处理: 如果你使用Protractor 做功能测试的时候,不再需要为登录页面做特殊处理.
  • 基于标准化:你的API可以采用标准化的 JSON Web Token (JWT). 这个标准已经存在多个后端库(.NET, Ruby, Java,Python, PHP)和多家公司的支持(如:Firebase,Google, Microsoft).
  • 大小: 97.1 KB
0
0
分享到:
评论

相关推荐

    18-理解 Keystone 核心概念1

    4. **Token**:Token是Keystone分配给成功验证的User的一种临时凭证,用于后续访问OpenStack服务。它是一个由数字和字母组成的字符串,具有一定的有效期,默认为24小时。服务会通过Keystone验证Token的有效性,确保...

    Openstack keystone 安装包

    8. **验证安装**:使用新创建的管理员用户登录Keystone,执行`openstack token issue`命令,如果成功,你应该会收到一个有效的令牌,表示Keystone已安装并运行正常。 压缩包中的"Keystone_安装手册.docx"很可能是...

    OpenStack Keystone

    理解Keystone的工作流程对于构建和维护一个安全稳定的OpenStack云平台至关重要。无论是在Keystone内部模块之间的交互,还是Keystone与其他OpenStack服务之间的交互,都遵循着严谨而灵活的设计原则,从而确保了整个...

    swift和keystone安装错误及解决方法

    总的来说,解决这些问题的关键在于理解Swift和Keystone的依赖关系,正确配置环境,以及熟悉Python编程和Linux系统管理。在遇到问题时,查阅官方文档,社区论坛和相关博客都是寻找答案的好方法。

    openstack生成token的代码解析

    - Keystone会验证每个请求中包含的Token的有效性。 3. **Token的刷新与失效**: - 为了安全考虑,Token具有一定的有效期,过期后需要重新获取。 - 在某些情况下,可以使用刷新Token(refresh token)来获取新的...

    openstack(F) keystone 安装的初始化的两个脚本

    keystone-manage bootstrap --os-token ADMIN_TOKEN \ --os-url http://localhost:35357/v2.0 \ --bootstrap-admin-user admin \ --bootstrap-admin-password ADMIN_PASSWORD \ --bootstrap-project-name ...

    19-通过例子学习 Keystone 1

    在这个例子中,我们将深入理解 Keystone 的工作原理,特别是如何通过一个实际操作——查询可用 image,来展示它的功能。 首先,我们要了解 Keystone 的核心概念,包括用户(User)、角色(Role)、项目(Project)...

    keystone-源码.rar

    8. **认证流程**:源码分析可以帮助理解keystone的认证流程,包括令牌的生成逻辑、权限检查以及如何处理未授权的请求。 9. **扩展性**:Keystone 支持插件式架构,允许开发者添加自定义的认证、授权和令牌提供者,...

    keystone简介PPT教案.pptx

    Keystone的相关配置文件通常是`/etc/keystone/keystone.conf`,其中`admin_token`选项是一个重要的安全设置,用于初始化Keystone服务。 总的来说,Keystone在OpenStack中起到了身份验证和授权的中心枢纽作用,是...

    OpenStack之认证服务(Keystone)

    OpenStack的认证服务Keystone是云平台的核心组件之一,它负责提供身份管理和授权服务,确保只有...理解并熟练掌握Keystone的配置和管理是OpenStack云平台运维的基础,这有助于构建一个安全、可靠的身份和权限管理体系。

    OpenStack之Curl使用

    Admin Token是所有服务共享的一个密钥,这个密钥对于keystone服务来说非常关键。如果更改了Admin Token,依赖于keystone的所有服务可能将无法正常工作。因此,保持Admin Token的稳定性和安全性至关重要。 Tenants在...

    OpenStack认证管理

    #### 四、Keystone认证工作原理和流程 **4.1 工作流程** - **认证请求**:客户端发起认证请求至Keystone API。 - **身份验证**:Keystone验证用户名和密码的有效性。 - **令牌生成**:验证通过后,生成一个唯一的...

    什么是openstack.docx

    4. nova-api 接受请求后向 keystone 发送认证请求,查看 token 是否为有效用户和 token。 5. keystone 验证 token 是否有效,将结果返回给 nova-api。 6. nova-api 和数据库通讯,初始化新建虚拟机的数据库记录。 7....

    OpenStack Keystone的基本概念详细介绍

    理解Keystone的基本概念是使用和管理OpenStack云环境的关键,因为它是整个OpenStack架构的入口点,控制着资源的访问权限和安全策略。正确配置和管理Keystone,有助于实现灵活、安全的多租户云环境。

    KeystoneTeam.github.io:包含Keystone信息的网站,包括Keystone Javadoc

    对于开发和维护OpenStack环境的人员,理解并熟练使用Keystone Javadoc至关重要,因为这将帮助他们更有效地集成、配置和管理云服务。通过深入研究这些文档,开发者能够更好地掌握OpenStack的安全性和可扩展性,提升其...

    openstack学习指南

    ### OpenStack学习指南:深入理解Keystone与Glance #### Keystone概述 Keystone作为OpenStack的核心组件之一,主要承担了身份认证与权限管理的角色。它不仅确保了OpenStack内部组件间的安全通信,还为外部用户提供...

    OpenStackKeystone身份服务体系结构与中间件.pdf

    - **租户(Tenant)**:租户是组织或项目的一种抽象,它定义了资源的边界,比如在 Compute 中的项目ID,在 Object Storage 中则可以关联多个容器。租户可以代表客户、账户、组织或项目。 - **用户(User)**:用户是...

    Python库 | python-keystoneclient-0.4.1.tar.gz

    - 库还支持命令行工具,允许用户通过终端进行身份验证和其他操作,比如`keystone token-get`命令用于获取令牌。 5. **集成OpenStack服务** - Python-keystoneclient是OpenStack SDK的一部分,用于与其他OpenStack...

    云基础设施openstack基础

    用户通过Keystone进行身份验证后,Keystone会生成Token作为后续访问OpenStack的凭证。 镜像服务则由Glance提供,负责管理启动虚拟机所需的镜像。计算服务由Nova负责,管理虚拟机的生命周期,包括创建、运行和终止...

    Identity.Authentication.and.Access.Management.in.OpenStack.2015.12.pdf

    #### 四、Keystone的服务部署 ##### 1. 部署模式 - **单节点部署**:适用于小型部署场景,简单易行但不推荐用于生产环境。 - **多节点高可用部署**:提高系统的可靠性和稳定性,适合大规模生产环境。 - **分布式部署...

Global site tag (gtag.js) - Google Analytics