OpenStack中keystone组件源码流程

OpenStack keystone组件源码解析:用户认证与资源映射
本文以OpenStack mitaka版本的keystone为例,探讨了keystone的管理端口35357和公共服务端口5000,以及用户认证的两种方式。客户端authenticate()方法涉及本地token获取、更新和保存。服务器端的认证包括admin_token匹配和用户密码验证。源码分析聚焦于用户信息获取,涉及客户端的HTTP请求和服务器端的wsgi路由器映射,如identity_routers.Admin(),并通过API接口查询用户信息。

此处以OpenStack mitaka版本为例,实际最新的Ocata版本也差不多,keystone的管理端口为35357,公共服务端口为5000,用户认证的方式包括用户密码认证和admin_token认证两种方式。客户端的authenticate()方法主要完成三个主要工作:a.尝试从本地获取token。b.本地没有token设置为强制更新,从服务器获取token。c.将新的token保存在本地。服务器端的admin_token认证方式判断客户端发传来的token与配置文件里的admin_token是否一致,用户密码认证方式authenticate()方法主要完成三个工作:a.如果报文中有token这个字段,则进行token认证。b.尝试外部认证。c.尝试本地认证。一个token有三个重要的属性:ID、用户信息、服务目录。
以获取某个用户信息为例分析keystonev2.0源码。
客户端:
加载用户资源。
/keystoneclient/v2_0/client.py

class Client(httpclient.HTTPClient):
     def __init__(self, **kwargs):
         ...
         self.users = users.UserManager(self._adapter, self.roles)
         ...

设置请求的url和userid参数。
/keystoneclient/v2_0/users.py

class UserManager(base.ManagerWithFind):
     ...
     def get(self, user):
         return self._get("/users/%s" % base.getid(user), "user")
     ...

最终调用HTTPClient发送GET请求

class Manager(object):
    ...
    def _get(self, url, response_key, **kwargs):
        resp, body = self.client.get(url, **kwargs)
        return s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值