谈谈OpenStack的鉴权过程

OpenStack在跨模块操作时需要配置认证信息,如Nova向neutron的请求。用户通过keystone认证获取token,Nova使用该token向keystone验证合法性。neutron的pipeline中的authtoken关键处理会补充请求头并进行token校验。当创建虚拟机时,若Nova以非admin权限的service租户调用neutron,会导致权限不足的错误。解决方案是为service租户的neutron用户赋予admin权限。
摘要由CSDN通过智能技术生成

OpenStack跨模块认证


我们知道OpenStack模块之间相互都需要配置认证信息用于HTTP请求认证,比如Nova向neutron发送请求配置如下:auth

这个配置有何用?
当一个用户从portal发起一个操作时,比如创建一个虚拟机。此时用户需要经过keystone的认证,并且获取合规的token,然后拿着token向nova发起一个创建虚拟机的请求。请求来到nova模块,nova需要去keystone那里确认此token的合法性,这个时候向keystone发起确认一个token合法性的时候就需要一个身份,这就是以上跨模块访问时需要一个身份配置。token确认合法后,nova才向neutron发起请求。当neutron收到一个请求时还要确认租户信息的合法性。

我们先看下neutron执行流程的pipeline:

[composite:neutronapi_v2_0]
 use = call:neutron.auth:pipeline_factory
 noauth = request_id catch_errors extensions neutronapiapp_v2_0
 keystone = request_id catch_errors authtoken keystonecontext extensions neutronapiapp_v2_0

其中authtoken是认证的关键处理
/keystonemiddleware/auth_token/__init__.py代码片段:

def filter_factory(global_conf, **local_conf):
      """Return a WSGI filter app for use with paste.deploy."""
         conf = global_conf.copy()
        conf.update(local_conf)
        def auth_filter(app):
            return AuthProtocol(app, conf)
        return auth_filter

其中AuthProtocol继承BaseAuthProtocol,也就是说根据wsgi规范会调用BaseAuthProtocol的__call__函数.

    @webob.dec.wsgify(RequestClass=_request._AuthTokenRequest)
    def __call__(self, req):
        "&
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值