文章内容

2024/7/18 3:01:50,作 者: 黄兵

OpenStack Swift 自定义认证中间件

我们使用 OpenStack Swift 的时候,认证可以使用 TempAuth 和 Keystone,但是 Keystone 太过于重型,安装和配置都非常麻烦,而且不能与我们的系统很好的集成,所以我们需要自己开发 OpenStack Swift 认证中间件。

创建自定义认证中间件

创建一个新的 Python 文件 local_auth.py

from swift.common.swob import Request, Response
from swift.common.utils import get_logger

class LocalAuthMiddleware(object):
    def __init__(self, app, conf):
        self.app = app
        self.conf = conf
        self.logger = get_logger(conf, log_route='local_auth')

    def __call__(self, env, start_response):
        req = Request(env)
        if req.headers.get('X-Auth-Token'):
            token = req.headers['X-Auth-Token']
            if self._validate_token(token):
                env['REMOTE_USER'] = self._get_user_from_token(token)
                return self.app(env, start_response)
            else:
                return Response(status=401, body='Unauthorized')(env, start_response)
        else:
            return Response(status=401, body='Unauthorized')(env, start_response)

    def _validate_token(self, token):
        # 在这里实现你的本地用户验证逻辑
        # 例如,查询本地数据库或其他存储来验证令牌
        return token == "valid_token"

    def _get_user_from_token(self, token):
        # 根据令牌获取用户信息
        return "user"

def filter_factory(global_conf, **local_conf):
    conf = global_conf.copy()
    conf.update(local_conf)
    def auth_filter(app):
        return LocalAuthMiddleware(app, conf)
    return auth_filter

配置 Swift 使用自定义认证中间件

编辑 /etc/swift/proxy-server.conf 文件,将自定义认证中间件添加到管道中:

[pipeline:main]
pipeline = catch_errors gatekeeper healthcheck proxy-logging cache local_auth proxy-server

[filter:local_auth]
paste.filter_factory = local_auth:filter_factory

重新启动 Swift 服务

sudo systemctl restart swift-proxy

这样就完成了一个 OpenStack Swift 中间件的编写。


其它相关推荐:

1、Ubuntu 22.04 安装 OpenStack Swift

2、Ubuntu 22.04 安装 OpenStack Swift 存储策略

3、ModuleNotFoundError: No module named 'pyeclib'

4、The 'lxml>=4.2.3' distribution was not found and is required by swift

5、Only IPv6 vps 访问GitHub等网站的方法

分享到:

发表评论

评论列表