`
顽石
  • 浏览: 167095 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

openstack keystone外部认证

 
阅读更多

1.keystone集成需求介绍

    公司要搭建基于openstack的私有云平台,提供IAAS。私有云用户是公司员工,考虑到公司已经有一套单点登录认证系统,需要openstack的keystone身份认证服务能集成该认证系统。

    keystone提供openstack的认证授权服务,它实现了OpenStack的Identity API,除此之外它还负责提供目录服务(提供服务的url)。keystone缺省提供基于用户名口令、LDAP等认证方式,此外还可开发python认证模块来提供其它的认证方式。

2.keystone外部认证流程

    集成公司已有的认证系统需要使用到keystone的外部(external authentication)认证,整个认证过程如下图。

    

      1)、用户在openatck控制台(该控制台可基于openstack的Horizon进行改造或重新开发)的登录页面中输入用户名、口令等,提交到公司认证系统进行登录认证。

 

      2)、公司认证系统认证通过后,返回访问凭证(通常是访问token)、用户名。

 

      3)、openstack控制台通过http协议将第二步收到的访问token和用户名通过keystone提供的认证接口发给keystone,发送的http请求大致如下:

        POST http://172.19.106.242:5000/v2.0/tokens

        REMOTE_USER:  用户名

        EXTERNAL_ACCESS_TOKEN: 访问token

        Accept: application/json

        Content-Type: application/json

       

        {"auth" : { } }    

 

        REMOTE_USER头是keystone进行外部认证必须要有的,请求中存在该头keystone才会执行外部认证,其值为用户名;EXTERNAL_ACCESS_TOKEN头是自定义的,其值是公司认证系统返回的访问token。

        http body是json格式,只有auth属性,内容为空。其他的如口令等都不需要。

 

     4)、keystone收到该请求后,识别出认证请求中存在REMOTE_USER头,就进行外部认证的处理,主要是根据REMOTE_USER头中的用户名查询keystone的user表,看用户记录是否存在(所以需要将公司用户信息同步到keystone的user表中,不需同步密码字段),存在就通过了keystone的认证,后续处理流程和进行用户名/密码验证的相同,主要是颁发keystone的unscoped token等(该token不和具体的project/tenant绑定)。

        基于安全的原因,keystone会到公司认证系统验证访问token(EXTERNAL_ACCESS_TOKEN头中携带),确保该token是公司认证系统颁发,且没过期。

         该验证也可采用其他方式,如keystone回调openstack控制台来验证该访问token,或openstack控制台和keystone之间采用对称或非对称密钥,keystone对opentack传过来的签名进行验证(该签名放在另一个http头中,去掉EXTERNAL_ACCESS_TOKEN头)。外加iptables进行控制台ip地址限制。

          在这一步的处理需要修改keystone的代码,具体的代码修改将在下面给出。

    5)、返回keystone unscoped token给控制台。

 

3.涉及到的代码修改

    keystone代码修改(基于openstack havana版)位于两个文件中,/opt/stack/keystone/keystone/token/controllers.py (对应v2.0认证接口)和/opt/stack/keystone/keystone/auth/controllers.py (对应v3认证接口),实际的文件位置根据安装来定。

   第一个文件的修改位于def _authenticate_external方法中,需要注意的是由于keystone的http底层代码会将收到的REMOTE_USER头加HTTP_前缀后改成HTTP_REMOTE_USER(目前的havana版存在该bug),因此在该方法中的context对象中是获取不到REMOTE_USER头的,需要在该方法开头进行如下的修改:

   #如果REMOTE_USER头和HTTP_REMOTE_USER头都没有,则抛异常

   if 'REMOTE_USER' not in context.get('environment', {}) and 'HTTP_REMOTE_USER' not in context.get('environment', {}):

            raise ExternalAuthNotApplicable()

   #如果REMOTER_USER为None,则将HTTP_REMOTE_USER的值赋给它。     

   remoteUser = context.get('environment', {}).get('REMOTE_USER')

   if not remoteUser:

            context['environment']['REMOTE_USER'] = context['environment']['HTTP_REMOTE_USER']

 

 到公司认证系统验证访问token的逻辑略去。

 

 第二个文件的修改位于 def authenticate(self, context, auth_info, auth_context)方法中,和第一个文件类似,不过该文件中对外部认证的处理还有其他几个小问题,通过调试很容易发现并修改。

 

 

   

  • 大小: 16.2 KB
分享到:
评论

相关推荐

    OpenStack认证管理

    - **Keystone API**:接收外部请求,并处理这些请求,如身份认证、令牌发放等。 - **Keystone Middleware**:不同的服务提供不同的认证或鉴权服务,如HTTP中间件等。 - **Keystone Services**:实现Keystone的核心...

    openstack安装文档

    接下来是Keystone服务的安装,这是OpenStack的身份认证和授权中心。安装`openstack-keystone`和`python-keystoneclient`,然后配置Keystone连接到MySQL数据库,创建服务数据库连接。使用`openstack-db`命令初始化...

    OpenStack Victoria版安装部署实例教程

    OpenStack的核心组件包括Keystone(认证服务)、Glance(镜像服务)、Placement(资源调度)、Nova(计算服务)、Neutron(网络服务)、Horizon(dashboard界面)和Cinder(块存储服务)。每个组件的配置都涉及...

    openstack多节点搭建

    - **Keystone**: OpenStack 的身份认证服务, 用于管理和验证用户身份以及对资源的访问权限。 - **配置步骤**: 1. **安装 Keystone**: `yum install openstack-keystone` 2. **初始化数据库**: `keystone-manage db...

    openstack学习文档

    1. **Keystone(身份认证服务)**:Keystone作为OpenStack中的身份认证服务,负责用户的认证、鉴权以及服务目录的维护等功能。 2. **Glance(镜像服务)**:Glance提供了对虚拟机镜像的存储、检索和维护功能,支持...

    openstack安装部署

    身份认证服务Keystone是OpenStack的核心组件之一,用于管理用户认证、授权和服务目录。 1. **安装Keystone相关组件** ``` yum install openstack-utils openstack-keystone python-keystoneclient ``` 2. **...

    OpenStack Kilo—CentOS安装指南 中文版

    Keystone是OpenStack中的身份认证服务,它负责用户的认证、鉴权和令牌管理。通过Keystone,用户可以访问OpenStack提供的各种服务。 ##### 安装和配置 1. 安装Keystone:`yum install openstack-keystone` 2. 配置...

    openstack install guide zypper kilo英文版

    例如,在一个典型的OpenStack部署中,用户首先通过Keystone进行认证,然后通过Nova创建虚拟机实例,使用Neutron配置网络连接,并通过Glance获取镜像。 ### 二、基本环境 #### 准备工作 - **安全性**:在安装...

    Openstack课程

    Keystone是OpenStack的身份服务,提供身份验证和授权功能,所有其他OpenStack服务都通过Keystone进行用户身份验证。Keystone的安装配置步骤包括: - 前期准备工作,包括服务的规划和配置。 - 安装和配置Keystone...

    openstack-rpm

    6. **Keystone**: 认证服务,为OpenStack的所有服务提供身份验证和授权。 7. **Horizon**: Web门户,用户可以通过它来交互式地管理和控制OpenStack资源。 8. **Ceilometer**: 监控服务,收集各种资源的使用情况数据...

    OpenStackKilo-中文安装指南

    OpenStack的概念架构基于一个中心化的身份认证服务(Keystone),其他服务都通过API接口与其交互来完成认证和权限检查。各个服务之间通过RESTful API相互通信,实现灵活可扩展的架构设计。 ##### 架构样例 为了更...

    OpenStack安装部署Icehouse

    6. Identity Service (Keystone):为其他 OpenStack 服务提供认证和授权服务。同时提供所有 OpenStack 服务的端点目录。 7. Image Service (Glance):存储和检索虚拟机磁盘镜像。OpenStack Compute 在实例配置时会...

    openstack quantum安装文档

    - Keystone 是 OpenStack 的身份认证服务,提供了用户认证、鉴权等功能。 - 介绍了如何为 Quantum 设置 Keystone 的认证信息,包括如何注册 Quantum 服务。 - **OpenStack Compute** - Nova 是 OpenStack 的计算...

    OpenStack全套安装教程.rar

    作为OpenStack的基础服务,Keystone提供了认证和授权功能。首先,创建数据库、服务端点和API版本,然后启动服务。 五、安装Nova Nova是OpenStack的核心服务,负责处理计算任务。安装Nova的控制节点和服务节点,配置...

    VMWare上安装OpenStack

    执行这个脚本可以创建OpenStack的身份认证环境。 - `edit_nova_conf.sh`: Nova配置文件的修改,可能涉及网络配置、计算资源调度策略等。执行这个脚本会帮助调整Nova的配置以适应VMware环境。 - `swift_container_...

    openstack部署

    - Keystone是OpenStack的身份认证服务。 - 在控制器节点上安装Keystone,创建相应的数据库,并对其进行配置。 - 配置文件位于`/etc/keystone/keystone.conf`。 - 示例命令: ``` [root@controller1~]# ...

    Python库 | keystone_oidc_auth_plugin-1.0.0-py3-none-any.whl

    1. **用户认证**:通过OIDC协议,用户可以通过外部认证服务器进行身份验证,如Google或Facebook等。 2. **令牌验证**:插件接收并验证由IDP签发的访问令牌,确保用户的身份有效。 3. **角色映射**:可以将外部IDP的...

    openstack实训报告(超详细,附实训所需要的代码,文档在手,实训不愁)本文件可免费下载,给作者点个赞

    Keystone是OpenStack的身份服务,负责用户认证、授权和会话管理。安装keystone包括创建数据库、初始化服务、配置身份服务以及启动服务。 ### 第五章 glance Glance是OpenStack的镜像服务,用于存储和检索虚拟机镜像...

    鸿鹄论坛《一天教会你openstack云计算入门》02-Openstack组件介绍-誉天邹SIR.rar

    7. **Keystone**:身份和认证服务,管理用户、项目和服务之间的权限。它是OpenStack的安全基础。 8. **Heat**:编排服务,允许用户通过模板定义复杂的云应用部署,自动处理资源的生命周期管理。 9. **Ceilometer**...

Global site tag (gtag.js) - Google Analytics