自定义身份验证
MLflow 的认证系统设计为可扩展的。您可以通过插件或可插拔函数使用自定义认证方法。
使用插件
如果您的组织需要更高级的认证逻辑(例如,基于令牌的认证),则可以安装第三方插件或创建自己的插件。例如,您可以安装 mlflow-oidc-auth 插件以启用基于 OIDC 的 SSO。
您的插件应为一个可安装的 Python 包。它应包含一个扩展 MLflow 应用的应用工厂,并可选择实现一个客户端来管理权限。应用工厂函数的名称将传递给 Flask CLI 中的 --app 参数。有关更多信息,请参阅 https://flask.org.cn/en/latest/cli/#application-discovery。
from flask import Flask, Response, request
from werkzeug.datastructures import Authorization
from mlflow.server import app
from mlflow.server.handlers import catch_mlflow_exception
def authenticate_request_custom() -> Authorization | Response:
"""Custom auth logic for your organization."""
...
@catch_mlflow_exception
def _before_request():
if request.path.startswith("/public"):
return
authorization = authenticate_request_custom()
if isinstance(authorization, Response):
return authorization
# Perform additional authorization checks with the Authorization object as needed.
def create_app(app: Flask = app):
app.add_url_rule("/api/custom-auth/login", view_func=..., methods=["POST"])
app.before_request(_before_request)
return app
class MyAuthClient:
...
然后,应在您的 Python 环境中安装该插件
pip install my_auth
然后,在 mlflow/setup.py 中注册您的插件
setup(
...,
entry_points="""
...
[mlflow.app]
my-auth=my_auth:create_app
[mlflow.app.client]
my-auth=my_auth:MyAuthClient
""",
)
然后,您可以启动 MLflow 服务器
mlflow server --app-name my-auth
使用函数
您可以配置服务器以使用一个扩展 MLflow 认证系统的自定义认证函数。
首先,安装认证扩展
pip install mlflow[auth]
创建一个自定义认证函数。如果请求已认证,该函数应返回一个 werkzeug.datastructures.Authorization 对象;如果请求未认证,则返回一个 Response 对象(通常是 401: Unauthorized)。请参阅 此示例 作为参考实现。
# custom_auth.py
from werkzeug.datastructures import Authorization
from flask import Response
def custom_authenticate() -> Union[Authorization, Response]:
# Your custom authentication logic
# Return Authorization object if authenticated
# Return Response object (401) if not authenticated
pass
然后,更新认证配置以使用您的自定义函数。默认情况下,配置文件位于 mlflow/server/auth/basic_auth.ini。或者,将环境变量 MLFLOW_AUTH_CONFIG_PATH 设置为指向您的自定义配置文件。将 authorization_function 设置的值指定为 module_name:function_name。该函数具有以下签名
# /path/to/auth_config.ini
[mlflow]
authorization_function = mlflow.server.auth:custom_authenticate
最后,使用 --app-name 标志启动 MLflow 服务器以启用认证。
mlflow server --app-name basic-auth