文章内容
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
评论列表