API 密钥和身份验证
切勿在没有适当安全措施的情况下将 Langflow 端口直接暴露给互联网。
设置 LANGFLOW_AUTO_LOGIN=False,使用非默认的 LANGFLOW_SECRET_KEY,并将您的 Langflow 服务器部署在启用身份验证的反向代理之后。
更多信息,请参阅启动启用身份验证的 Langflow 服务器。
身份验证凭据有助于防止对您的 Langflow 服务器、流以及通过组件连接的服务的未经授权访问。
在 Langflow 中,您会使用三种类型的凭据:
- Langflow API 密钥:用于 Langflow API 的身份验证,并授权运行流和上传文件等服务器端 Langflow 操作。
- 组件 API 密钥:用于 Langflow 与通过组件连接的服务(如模型提供商或第三方 API)之间的身份验证。
- 身份验证环境变量:这些环境变量配置 Langflow 如何处理用户身份验证和授权。
Langflow API 密钥
您可以使用 Langflow API 密钥以编程方式与 Langflow 交互。
默认情况下,大多数 Langflow API 端点(例如 /v1/run/$FLOW_ID)都需要使用 Langflow API 密钥进行身份验证。
Langflow 会根据存储在数据库中的密钥验证 API 密钥,但您也可以将 Langflow 配置为根据环境变量验证 API 密钥。
更多信息,请参阅 LANGFLOW_API_KEY_SOURCE。
要为流 Webhook 端点启用 API 密钥身份验证,请使用 LANGFLOW_WEBHOOK_AUTH_ENABLE 环境变量。
要为 Langflow MCP 服务器配置身份验证,请参阅将 Langflow 用作 MCP 服务器。
Langflow API 密钥权限
Langflow API 密钥继承创建它的用户的权限。 这意味着您创建的 API 密钥具有与您相同的权限和访问权限,包括访问您的流、组件和 Langflow 数据库。 Langflow API 密钥不能用于访问您自己的 Langflow 服务器之外的资源。
在单用户环境中,您始终是超级用户,您的 Langflow API 密钥始终具有超级用户权限。
在多用户环境中,非超级用户不能使用其 API 密钥访问其他用户的资源。 超级用户只能运行自己的流,不能运行其他用户拥有的流。 您必须启动启用身份验证的 Langflow 服务器以允许用户管理和创建非超级用户账户。
创建 Langflow API 密钥
您可以在 Langflow 设置中或使用 Langflow CLI 生成 Langflow API 密钥。
如果您的 Langflow 服务器以 --backend-only 模式运行,则必须使用 CLI 选项。
- Langflow 设置
- Langflow CLI
- 在 Langflow 顶部导航栏中,点击您的个人资料图标,然后选择 Settings(设置)。
- 点击 Langflow API Keys,然后点击 Add New。
- 为您的密钥命名,然后点击 Create API Key。
- 复制 API 密钥并安全存储。
如果您使用 --backend-only=true 提供流服务,则无法在 Langflow 设置中创建 API 密钥,因为前端没有运行。
在这种情况下,您必须使用 Langflow CLI 创建 API 密钥。
-
Langflow 团队出于安全原因建议启用身份验证,以防止未经授权创建 API 密钥和超级用户,特别是在生产环境中。 如果未启用身份验证(
LANGFLOW_AUTO_LOGIN=True),则所有用户实际上都是超级用户,他们可以使用 Langflow CLI 创建 API 密钥。 -
使用
langflow api-key创建 API 密钥:_10uv run langflow api-key使用 Langflow CLI 创建的所有 API 密钥都具有超级用户权限,因为该命令需要超级用户身份验证,且 Langflow API 密钥继承创建它们的用户的权限。
使用 Langflow API 密钥
要验证 Langflow API 请求,请在 x-api-key 请求头或查询参数中传递您的 Langflow API 密钥。
- HTTP 请求头
- 查询参数
_10curl -X POST \_10 "http://$LANGFLOW_SERVER_ADDRESS/api/v1/run/$FLOW_ID?stream=false" \_10 -H "Content-Type: application/json" \_10 -H "x-api-key: $LANGFLOW_API_KEY" \_10 -d '{"inputs": {"text":""}, "tweaks": {}}'
_10curl -X POST \_10 "http://$LANGFLOW_SERVER_ADDRESS/api/v1/run/$FLOW_ID?x-api-key=$LANGFLOW_API_KEY" \_10 -H "Content-Type: application/json" \_10 -d '{"inputs": {"text":""}, "tweaks": {}}'
有关构建 Langflow API 请求的更多信息,请参阅 Langflow API 入门 和 使用 Langflow API 触发流。
跟踪 API 密钥使用情况
默认情况下,Langflow 通过 Langflow 数据库中的 total_uses 和 last_used_at 记录跟踪 API 密钥的使用情况。
要禁用 API 密钥跟踪,请在 Langflow 环境变量中设置 LANGFLOW_DISABLE_TRACK_APIKEY_USAGE=True。
这有助于在高并发期间避免数据库争用。
撤销 API 密钥
要撤销并删除 API 密钥,请执行以下操作:
- 在 Langflow 顶部导航栏中,点击您的个人资料图标,然后选择 Settings(设置)。
- 点击 Langflow API Keys。
- 选择您要删除的密钥,然后点击 Delete(删除)。
此操作会立即使密钥失效并防止其再次被使用。
组件 API 密钥
组件 API 密钥授权访问流中组件调用的外部服务,例如模型提供商、数据库或第三方 API。 这些不是 Langflow API 密钥或通用应用程序凭据。
在 Langflow 中,您可以将组件 API 密钥存储在 设置 中的全局变量中,或者从您的运行时环境导入它们。 有关更多信息,请参阅全局变量。
您在服务提供商的平台内创建和管理组件 API 密钥。 Langflow 仅存储加密的密钥值或对存储在别处的密钥的安全引用;它不管理源头的实际凭据。 这意味着从 Langflow 中删除全局变量不会删除或使服务提供商系统中的实际 API 密钥失效。 您必须直接使用服务提供商的界面或 API 删除或轮换组件 API 密钥。
为了增加安全性,您可以设置 LANGFLOW_REMOVE_API_KEYS=True,以便在 Langflow 数据库的流数据中省略 API 密钥和令牌。
此外,在导出流时,您可以选择从导出的流 JSON 中省略 API 密钥。
身份验证环境变量
本节介绍可用的身份验证配置变量。
您可以使用 Langflow 存储库中的 .env.example 文件作为您自己的 .env 文件的模板。
LANGFLOW_AUTO_LOGIN
此变量控制是否需要身份验证才能访问您的 Langflow 服务器,包括可视化编辑器、API 和 Langflow CLI:
-
如果
LANGFLOW_AUTO_LOGIN=False,则禁用自动登录。用户必须登录可视化编辑器,以超级用户身份通过身份验证才能运行某些 Langflow CLI 命令,并在 Langflow API 请求中使用 Langflow API 密钥。 如果为false,Langflow 团队建议您还显式设置LANGFLOW_SUPERUSER和LANGFLOW_SUPERUSER_PASSWORD,以避免使用不安全的默认值。 -
如果
LANGFLOW_AUTO_LOGIN=True(默认),所有 API 请求都需要使用 Langflow API 密钥进行身份验证,但可视化编辑器会自动将所有用户登录为超级用户,并且 Langflow _仅_使用默认的超级用户凭据。 所有用户在没有密码保护的情况下访问同一个可视化编辑器环境,他们可以作为超级用户运行所有 Langflow CLI 命令,并且 Langflow 会根据用户的超级用户权限自动验证后端和前端之间的内部请求。 如果您还想在跳过其他身份验证的同时跳过 Langflow API 请求的身份验证,请参阅LANGFLOW_SKIP_AUTH_AUTO_LOGIN。
Langflow 不允许用户同时实时编辑同一个流。 如果两个用户编辑同一个流,Langflow 仅根据该用户的工作区状态保存最近一位编辑者的工作。在此期间另一位用户所做的任何更改都将被覆盖。
默认身份验证强制执行和 LANGFLOW_SKIP_AUTH_AUTO_LOGIN
在 Langflow 1.6 版本中,默认设置是 LANGFLOW_AUTO_LOGIN=True 和 LANGFLOW_SKIP_AUTH_AUTO_LOGIN=False。
如前所述,这仅对 API 请求强制执行身份验证。
为了临时的向后兼容性,您可以通过将这两个变量都设置为 true 来恢复早期版本中完全未经身份验证的行为。
但是,未来的版本将设置 LANGFLOW_AUTO_LOGIN=False 并移除 LANGFLOW_SKIP_AUTH_AUTO_LOGIN。
届时,Langflow 将对 API 请求严格强制执行 API 密钥身份验证,您可以通过设置 LANGFLOW_AUTO_LOGIN=True 手动禁用某些功能(如可视化编辑器)的身份验证。
早期版本中的身份验证强制执行
Langflow 1.5 版本是第一个无论 LANGFLOW_AUTO_LOGIN 的值如何,都可以对 Langflow API 请求强制执行身份验证的版本。
作为向后兼容的临时绕过,此版本添加了 LANGFLOW_SKIP_AUTH_AUTO_LOGIN 环境变量,并将这两个变量默认设置为 true,以保留早期版本中完全未经身份验证的行为。
这允许用户升级到 1.5 版本而无需更改身份验证行为。
在早于 1.5 的 Langflow 版本中,Langflow API 请求不需要身份验证。
此外,LANGFLOW_AUTO_LOGIN=True 的默认设置会自动授予所有用户可视化编辑器中的超级用户权限,并允许所有用户以超级用户身份运行所有 Langflow CLI 命令。
LANGFLOW_ENABLE_SUPERUSER_CLI
控制 Langflow CLI 中 langflow superuser 命令的可用性。
默认值为 true,但建议设置为 false 以防止不受限制地创建超级用户。
有关更多信息,请参阅 langflow superuser。
LANGFLOW_SUPERUSER 和 LANGFLOW_SUPERUSER_PASSWORD
这些变量指定 Langflow 服务器超级用户的用户名和密码。
_10LANGFLOW_SUPERUSER=administrator_10LANGFLOW_SUPERUSER_PASSWORD=securepassword
如果 LANGFLOW_AUTO_LOGIN=False,则需要这些变量。
否则,它们不相关。
当您启动启用身份验证的 Langflow 服务器时,如果需要这些变量但_未_设置,则 Langflow 使用默认值 langflow 和 langflow。
这些默认值在使用 Langflow CLI 命令 langflow superuser 时不适用。
LANGFLOW_SECRET_KEY
此环境变量存储用于加密 API 密钥等敏感数据的密钥。 Langflow 使用 Fernet 库进行密钥加密。
如果未提供密钥,Langflow 会自动生成一个。
但是,您应该在生产环境中生成并显式设置您自己的密钥。 这对于 Kubernetes 等多实例部署尤为重要,以确保各实例之间的加密一致。
要为 LANGFLOW_SECRET_KEY 生成加密密钥,请执行以下操作:
-
运行命令以生成密钥并将其复制到剪贴板。
- macOS 或 Linux
- Windows
-
macOS:生成密钥并将其复制到剪贴板:
_10python3 -c "from secrets import token_urlsafe; print(f'LANGFLOW_SECRET_KEY={token_urlsafe(32)}')" | pbcopy -
Linux:生成密钥并将其复制到剪贴板:
_10python3 -c "from secrets import token_urlsafe; print(f'LANGFLOW_SECRET_KEY={token_urlsafe(32)}')" | xclip -selection clipboard -
Unix:生成密钥并将其打印到终端以便手动复制:
_10python3 -c "from secrets import token_urlsafe; print(f'LANGFLOW_SECRET_KEY={token_urlsafe(32)}')"
-
生成密钥并将其复制到剪贴板:
_10python -c "from secrets import token_urlsafe; print(f'LANGFLOW_SECRET_KEY={token_urlsafe(32)}')" -
生成密钥并将其打印到终端以便手动复制:
_10_10# 或者只是打印_10python -c "from secrets import token_urlsafe; print(f'LANGFLOW_SECRET_KEY={token_urlsafe(32)}')"
-
将值粘贴到您的
.env文件中:_10LANGFLOW_SECRET_KEY=dBuu...2kM2_fb如果您在 Docker 上运行 Langflow,请在
docker-compose.yml文件中引用.env文件中的LANGFLOW_SECRET_KEY,如下所示:_10environment:_10- LANGFLOW_SECRET_KEY=${LANGFLOW_SECRET_KEY}
LANGFLOW_NEW_USER_IS_ACTIVE
当 LANGFLOW_NEW_USER_IS_ACTIVE=False(默认)时,超级用户必须在显式激活新用户账户后,该用户才能登录可视化编辑器。
超级用户还可以根据需要停用用户账户。
当 LANGFLOW_NEW_USER_IS_ACTIVE=True 时,新用户账户会自动激活。
_10LANGFLOW_NEW_USER_IS_ACTIVE=False
只有超级用户可以管理 Langflow 服务器的用户账户,但用户管理仅在您的服务器启用了身份验证时才有意义。 有关更多信息,请参阅启动启用身份验证的 Langflow 服务器。
LANGFLOW_API_KEY_SOURCE
此变量控制 Langflow 如何验证 API 密钥。
| 值 | 描述 |
|---|---|
db (默认) | 根据存储在数据库中的 Langflow API 密钥验证 API 密钥。这是标准行为,用户通过 Langflow UI 或 CLI 创建和管理 API 密钥。 |
env | 根据 LANGFLOW_API_KEY 环境变量验证 API 密钥。适用于 Kubernetes 部署、CI/CD 流水线或任何您希望在没有数据库配置的情况下注入预定义 API 密钥的环境。 |
默认情况下,Langflow 在 LANGFLOW_API_KEY_SOURCE=db 时根据 Langflow 数据库验证 x-api-key 请求头。
使用基于数据库的验证时,您可以创建具有每个用户权限的多个密钥、跟踪使用情况并通过 Langflow UI 或 CLI 管理密钥。
当 LANGFLOW_API_KEY_SOURCE=env 时,Langflow 根据 LANGFLOW_API_KEY 环境变量的值验证 x-api-key 请求头。
这意味着 Langflow 可以在无状态环境中安全运行,例如使用 LFX 或 Kubernetes secrets。
当 LANGFLOW_API_KEY_SOURCE=env 时,该部署只能使用一个 API 密钥。所有经过身份验证的请求都使用相同的 API 密钥,成功的身份验证将授予超级用户权限。
此模式专为单租户部署或自动化系统设计,不适用于不同用户需要不同访问级别的多用户环境。要轮换您的密钥,请更新环境变量并重启 Langflow 服务器。
要启用基于环境的 API 密钥验证:
-
在 Langflow
.env文件中,将 API 密钥来源设置为env:_10LANGFLOW_API_KEY_SOURCE=env -
在 Langflow
.env文件中,设置 API 密钥值:_10LANGFLOW_API_KEY=your-secure-api-key -
在您的请求中使用 API 密钥:
_10curl -X POST \_10"http://LANGFLOW_SERVER_ADDRESS/api/v1/run/FLOW_ID?stream=false" \_10-H "Content-Type: application/json" \_10-H "x-api-key: LANGFLOW_API_KEY" \_10-d '{"inputs": {"text":""}, "tweaks": {}}'将
LANGFLOW_SERVER_ADDRESS、FLOW_ID和LANGFLOW_API_KEY替换为您部署中的实际值。
Kubernetes 部署示例
要在 Kubernetes Secret 中配置基于环境的 API 密钥,请执行以下操作:
-
使用您的 API 密钥创建一个 Kubernetes Secret:
_10apiVersion: v1_10kind: Secret_10metadata:_10name: langflow-api-key_10type: Opaque_10stringData:_10api-key: "YOUR_API_KEY"将
YOUR_API_KEY替换为 Langflow.env文件中的LANGFLOW_API_KEY值。 -
在您的 Kubernetes 部署中引用
langflow-api-keySecret:_18apiVersion: apps/v1_18kind: Deployment_18metadata:_18name: langflow_18spec:_18template:_18spec:_18containers:_18- name: langflow_18image: langflowai/langflow:latest_18env:_18- name: LANGFLOW_API_KEY_SOURCE_18value: "env"_18- name: LANGFLOW_API_KEY_18valueFrom:_18secretKeyRef:_18name: langflow-api-key_18key: api-key
Docker Compose 示例
要在 Docker Compose 中配置基于环境的 API 密钥,请执行以下操作:
-
在您的 Langflow
.env文件中设置 API 密钥。_10LANGFLOW_API_KEY=your-secure-api-key将
YOUR_API_KEY替换为您实际的 Langflow API 密钥值。 -
创建或更新您的
docker-compose.yml文件以设置LANGFLOW_API_KEY_SOURCE=env并引用LANGFLOW_API_KEY。_10services:_10langflow:_10image: langflowai/langflow:latest_10environment:_10- LANGFLOW_API_KEY_SOURCE=env_10- LANGFLOW_API_KEY=${LANGFLOW_API_KEY}_10ports:_10- "7860:7860"
LANGFLOW_CORS_*
跨源资源共享 (CORS) 配置控制当您的 Langflow 前端和后端从不同源提供服务时,如何处理身份验证凭据。
可以使用以下 LANGFLOW_CORS_* 环境变量:
| 变量 | 格式 | 默认值 | 描述 |
|---|---|---|---|
LANGFLOW_CORS_ALLOW_CREDENTIALS | 布尔值 | True | 是否允许 CORS 请求中的凭据,例如 cookie 和授权头。 |
LANGFLOW_CORS_ALLOW_HEADERS | 字符串列表或字符串 | * | CORS 请求允许的请求头。提供以逗号分隔的请求头列表或使用 * 允许所有请求头。 |
LANGFLOW_CORS_ALLOW_METHODS | 字符串列表或字符串 | * | CORS 请求允许的 HTTP 方法。提供以逗号分隔的方法列表或使用 * 允许所有方法。 |
LANGFLOW_CORS_ORIGINS | 字符串 | * | 允许的 CORS 源。提供以逗号分隔的源列表或使用 * 允许所有源。 |
默认配置启用了 CORS 凭据,并使用通配符 (*) 允许所有源、请求头和方法:
_10LANGFLOW_CORS_ORIGINS=*_10LANGFLOW_CORS_ALLOW_CREDENTIALS=True_10LANGFLOW_CORS_ALLOW_HEADERS=*_10LANGFLOW_CORS_ALLOW_METHODS=*
Langflow 的默认 CORS 设置在生产环境中可能存在安全风险,因为任何网站都可以向您的 Langflow API 发送请求,并且任何网站都可以在跨源请求中包含凭据,包括身份验证 cookie 和授权头。
在生产部署中,请在 LANGFLOW_CORS_ORIGINS 中指定确切的源。
如果需要,您还可以指定允许的请求头和方法。
例如:
_10LANGFLOW_CORS_ORIGINS=https://yourdomain.com,https://app.yourdomain.com_10LANGFLOW_CORS_ALLOW_CREDENTIALS=True_10LANGFLOW_CORS_ALLOW_HEADERS=Content-Type,Authorization_10LANGFLOW_CORS_ALLOW_METHODS=GET,POST,PUT
SSRF 防护
以下环境变量为 API Request 组件配置服务端请求伪造 (SSRF) 防护。 SSRF 防护可防止对内部或私有网络资源(如私有 IP 范围、回环地址和云元数据端点)的请求。
| 变量 | 格式 | 默认值 | 描述 |
|---|---|---|---|
LANGFLOW_SSRF_PROTECTION_ENABLED | 布尔值 | False | 为 API Request 组件启用 SSRF 防护。启用后,组件会拦截对私有 IP 地址的请求。禁用时,不会拦截请求。 |
LANGFLOW_SSRF_ALLOWED_HOSTS | 字符串列表 | 未设置 | 以逗号分隔的允许的主机、IP 地址或 CIDR 范围列表,可以绕过 SSRF 防护检查。例如:192.168.1.0/24,10.0.0.5,*.internal.company.local。 |
LANGFLOW_WEBHOOK_AUTH_ENABLE
此变量控制 Webhook 端点是否需要 API 密钥身份验证。
| 变量 | 格式 | 默认值 | 描述 |
|---|---|---|---|
LANGFLOW_WEBHOOK_AUTH_ENABLE | 布尔值 | False | 当为 True 时,Webhook 端点需要 API 密钥身份验证,并验证经过身份验证的用户是否拥有正在执行的流。当为 False 时,不需要 Langflow API 密钥,发往 Webhook 端点路的所有请求都被视为由流所有者发送。 |
默认情况下,Webhooks 在 LANGFLOW_WEBHOOK_AUTH_ENABLE=False 时作为流所有者运行,无需身份验证。
要为 Webhooks 启用 API 密钥身份验证,请在 Langflow .env 文件中设置 LANGFLOW_WEBHOOK_AUTH_ENABLE=True。
启用 Webhook 身份验证后,您必须在每个 Webhook 请求中以 HTTP 请求头或查询参数的形式提供 Langflow API 密钥。更多信息,请参阅为 Webhooks 要求身份验证。
启动启用 身份验证的 Langflow 服务器
本节向您展示如何使用身份验证环境变量来部署启用身份验证的 Langflow 服务器。 这涉及禁用自动登录、设置超级用户凭据、生成加密密钥以及启用用户管理。
对于 Langflow 暴露在共享或公共网络中,或者多个用户访问同一个 Langflow 服务器的任何部署,建议采用此配置。
启用身份验证后,所有用户都必须使用有效的凭据登录可视化编辑器,且 API 请求需要使用 Langflow API 密钥进行身份验证。 此外,您必须以超级用户身份登录才能管理用户,并创建具有超级用户权限的 Langflow API 密钥。
启动 Langflow 服务器
-
创建一个包含以下变量的
.env文件:_10LANGFLOW_AUTO_LOGIN=False_10LANGFLOW_SUPERUSER=_10LANGFLOW_SUPERUSER_PASSWORD=_10LANGFLOW_SECRET_KEY=_10LANGFLOW_NEW_USER_IS_ACTIVE=False_10LANGFLOW_ENABLE_SUPERUSER_CLI=False您的
.env文件可以包含其他环境变量。 本示例重点介绍身份验证变量。 -
将
LANGFLOW_SUPERUSER和LANGFLOW_SUPERUSER_PASSWORD设置为您想要的超级用户凭据。对于一次性测试,您可以使用
administrator和password等基础凭据。 在真实的开发和生产环境中,建议使用强密码并安全存储凭据。 -
推荐:生成并设置
LANGFLOW_SECRET_KEY以加密敏感数据。如果您不设置密钥,Langflow 会自动生成一个,但不建议在生产环境中使用。
有关生成和设置密钥的说明,请参阅
LANGFLOW_SECRET_KEY。 -
保存已填充变量的
.env文件。例如:_10LANGFLOW_AUTO_LOGIN=False_10LANGFLOW_SUPERUSER=administrator_10LANGFLOW_SUPERUSER_PASSWORD=securepassword_10LANGFLOW_SECRET_KEY=dBuu...2kM2_fb_10LANGFLOW_NEW_USER_IS_ACTIVE=False_10LANGFLOW_ENABLE_SUPERUSER_CLI=False -
使用
.env文件中的配置启动 Langflow:_10uv run langflow run --env-file .env使用
.env文件启动 Langflow 会自动将您验证为LANGFLOW_SUPERUSER和LANGFLOW_SUPERUSER_PASSWORD中设置的超级用户。 如果您没有显式设置这些变量,系统自动登录的默认值是langflow和langflow。 -
验证服务器是否正在运行。默认位置是
http://localhost:7860。
接下来,您可以向 Langflow 服务器添加用户,以便与他人协作处理流。
以管理员身份管理用户
-
要以超级用户身份完成首次登录,请访问
http://localhost:7860/login。如果您没有使用默认位置,请将
localhost:7860替换为您的服务器地址。 -
使用您在
.env中设置的超级用户凭据登录(LANGFLOW_SUPERUSER和LANGFLOW_SUPERUSER_PASSWORD)。 -
要管理服务器上的用户,请导航至
/admin(例如http://localhost:7860/admin),点击个人资料图标,然后点击 Admin Page(管理员页面)。作为超级用户,您可以添加用户、设置权限、重置密码和删除账户。
-
要添加用户,点击 New User,然后填写用户账户表单:
- 输入用户名和密码。
- 要立即激活账户,请选择 Active。未激活的用户无法登录或访问他们在停用前创建的流。
- 如果您不希望该用户拥有完全的管理权限,请取消选择 Superuser。
- 点击 Save。新用户将出现在 Admin Page 中。
-
要测试新用户的访问权限,请退出 Langflow,然后使用新用户的凭据登录。
尝试访问
/admin页面。 如果新用户不是超级用户,您将被重定向到/flows页面。