Docker中MLflow开启Basic Auth后,设置MLFLOW_TRACKING_TOKEN仍遇401错误
MLflow Basic认证模式下Bearer Token请求401问题解决
问题核心原因
你通过mlflow server --app-name basic-auth启动的是MLflow内置的Basic专属认证模式,该模式仅支持账号密码形式的HTTP Basic认证,完全不处理Bearer Token类型的请求。
官方文档中提到的MLFLOW_TRACKING_TOKEN用于Bearer认证,是针对支持Bearer的MLflow服务端配置(如自定义认证后端、OAuth2集成场景),而非内置的basic-auth应用。
解决方案
方案1:继续使用Basic认证(适配当前服务端)
若要通过环境变量实现认证,不要使用MLFLOW_TRACKING_TOKEN,需同时设置以下两个环境变量:
export MLFLOW_TRACKING_USERNAME=admin export MLFLOW_TRACKING_PASSWORD=password
之后在代码中可自动读取环境变量完成认证:
import requests import os # 使用环境变量构造Basic Auth参数 response = requests.get( r'http://<tracking_uri:5000/api/2.0/mlflow/experiments/search', json={"max_results":10}, auth=(os.getenv("MLFLOW_TRACKING_USERNAME"), os.getenv("MLFLOW_TRACKING_PASSWORD")) )
或者使用MLflow官方客户端,会自动读取环境变量:
import mlflow mlflow.set_tracking_uri("http://<tracking_uri:5000>") # 后续调用MLflow API时自动携带认证信息 experiments = mlflow.search_experiments(max_results=10)
方案2:切换到支持Bearer Token的认证模式
如果必须使用Bearer Token,需放弃内置的basic-auth应用,配置支持Bearer的认证后端:
- 编写自定义MLflow认证插件,实现Bearer Token的校验逻辑
- 集成第三方OAuth2服务作为MLflow的认证提供者
关键提示
你直接在请求头中传入Bearer <random_string>无效,是因为当前服务端(basic-auth模式)只会校验Basic Auth格式的Authorization头,对Bearer类型的请求直接返回401未授权。
内容的提问来源于stack exchange,提问作者RaviTeja Pagala
相关产品推荐
相关产品推荐

