Dify v0.13.0+自托管版支持会话级API Key透传,需配置ENABLE_SESSION_API_KEY=True,前端通过SDK或请求头注入X-Api-Key,后端须校验Key归属用户白名单以防伪造。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Dify中为不同用户会话分配独立的自定义API Key,确保各会话调用外部大模型时使用各自绑定的密钥,避免密钥混用或泄露风险。
确认Dify版本与部署模式
必须使用 Dify v0.13.0 或更高版本,且为自托管部署(非SaaS版),因SaaS版不开放API Key透传与会话级密钥注入能力。
进入Dify后台 → 左侧菜单栏点击「Settings」→ 滚动到底部查看「Version」字段,【低于v0.13.0需先升级,否则后续配置无效】。
启用会话级API Key透传功能
编辑 Dify 服务端配置文件 dify/config.py,在 class ProductionConfig(Config) 类内添加:
ENABLE_SESSION_API_KEY = True
该配置开启后,Dify会在处理每个会话请求时检查请求头中是否携带 X-Api-Key,并优先使用该值作为本次会话调用LLM的凭证。未携带则回落至应用默认Key。
前端会话初始化时注入自定义Key
方法一:通过 SDK 初始化时传入
使用 Dify 的 Web SDK 时,在创建 new ChatClient() 实例后,调用 setApiKey("sk-xxx") 方法;该Key将被持久化到当前会话上下文,后续所有 sendMessage() 请求自动携带 X-Api-Key: sk-xxx 头。
方法二:手动构造请求头发起会话
向 /chat-messages 接口 POST 请求时,在 Headers 中显式添加 X-Api-Key: sk-xxx;【此Key仅对本次请求及后续同会话ID的连续请求生效,会话ID由首次响应中的 conversation_id 确定】。
后端验证密钥有效性并限制作用域
第一步:在 dify/api/core/middleware/auth.py 中定位 get_api_key_from_header() 函数。
第二步:修改其返回逻辑,增加白名单校验——从数据库查出该会话所属用户的可用API Key列表,比对请求头中的 X-Api-Key 是否在其中。
第三步:若不匹配,直接返回 403 错误,不进入后续消息处理流程。
这一步防止用户伪造他人Key发起会话;若跳过校验,攻击者可绕过权限控制随意调用任意Key。


















