微信扫码
添加专属顾问
我要投稿
Dify社区版发布页面存在用户鉴权缺失问题,本文探讨两种实用解决方案及其优缺点。 核心内容: 1. 社区版Dify发布页面的安全风险分析 2. 输入变量+内部鉴权的实现方案与局限性 3. 表单提交方案的技术实现与交互优化
社区版dify应用编排完成后,点击运行按钮,会发布成一个独立的可访问链接。通过该链接其他用户可直接访问编排好的Dify应用,这样能够极大的方便Dify应用的分享与访问,如下图所示:
但是社区版Dify中发布页面是没有用户鉴权的,这就导致一旦这个链接分享出去,任何有Dify系统访问权限的用户都可以访问该应用。如果该应用(特指Dify编排发布的应用)中涉及到企业内部数据,那么就存在数据泄露的风险,那么有没有什么手段可以在发布页面中增加用户鉴权呢?上周尝试了几种方案,这里进行统一汇总说明。
在Dify应用编排时,可以在开始节点手动增加额外的变量输入,这里我们就可把用户名+密码作为开始节点的变量,然后在工作流内部再增加用户鉴权,如下图所示:
其中开始节点配置如下:
最终页面呈现的效果如下
即在每轮新开对话之前,都需要用户输入用户名密码,只有内部鉴权通过之后,才能继续后续操作,从而能在一定程度上做到用户鉴权。
但这个方案也存在两个弊端:
1、如上图所示,输入密码不是隐藏的效果,而是直接明文展示的,存在安全风险;
2、这个用户名及密码输入只能够针对单个会话,如果新开一个会话就需要重新输入用户名及密码,在操作使用上存在不方便。
方案一中,密码是明文显示的,那么有没有方案可以将密码进行隐藏的,这里在网上找到一个方案,通过表单的形式进行内容提交,很巧妙,而且未来可以做的事情将不止用户名密码输入。整体工作流如下图所示:
如果是第1轮用户输入,要求用户先通过表单填写用户名及密码,然后就可以对用户名及密码进行鉴权以及进行后续操作(图中没有体现)。
这里用到一个模版转化的节点,其内容如下:
<form data-format='json'> <label for="username">用户名:</label> <input type="text" name="username"/> <label for="password">密码:</label> <input type="password" name="password"/> <button data-size="small" data-variant="primary">登陆</button> </form> |
即定义了一个基本的用户名及密码提交表单(这里将密码输入内容做了password属性声明),并将转化后结果直接推送给回复节点进行展示,Dify会将其转化成页面表单的内容。最终实现效果如下图所示:
这里可以看到,比较尴尬的是,虽然在表单提交页面密码做了加密处理,但是Dify非常耿直的将表单提交内容进行了二次输入,最终实际我们还是没有达到密码加密的目的。同样,这个方案也存在每一个新的会话都需要进行一次重复输入的过程。不过,这种表单的应用后续可以用在做在线调差问卷,满意度打分等场景,后续具有很强的可扩展性。
目前在Dify发布页面中没有找到比较好用的用户鉴权方案,最终我们采用的方案是将Dify发布页面嵌入到业务系统中,鉴权的事情交给业务系统来做,Dify还是专注于工作流编排的事情。当然,这里这里也不是单纯的页面嵌入,还是希望增加一些鉴权手段的。如下图工作流所示:
这里我们同样在开始节点增加一个msg输入参数,配置如下:
设置其属性为隐藏,即不需要用户在开始页面进行编辑输入,这个参数将由业务系统在访问Dify链接时进行传入,最终业务系统调用链接如下所示:
https://dify.****.com/chat/brhl********OMN?msg=xxxxxxxxxxx |
传递的msg信息是当前业务系统对当前“登录用户名+当前日期”的RSA加密结果,Dify获取到该密文后,将首先进行RAS解密,然后再提取其中的用户名和当前日期,如果解密失败或者日期非当前日期,则均提示用户名校验失败,只有校验通过后才允许执行后续操作。如下图所示:
至此,我们在不改变
Dify原有代码的前提下,初步实现了Dify发布页面的用户鉴权过程,且整个过程中用户无需进行额外的输入,执行过程较为流畅。
这里其实还存在一个问题没有解决,后续需要进行进一步研究,这里进行记录:
当前为了防止其他用户拿到RSA加密后的密文直接仿造请求链接访问Dify页面,我们在密文中增加了当前日期作为时效性控制,即如果解密后的日期非当前日期,则认为密文失效,同样鉴权失败,保证了即使其他用户拿到了加密后的密文也只能当天有效,后续就失效了。
但是在Dify实际应用中发现,通过链接传递进来的msg信息仅对新开会话生效,历史会话中的msg参数是不会变化的,这就导致之前历史会话将无法再次使用(历史的会话中保存的msg数据已失效),这在一定程度上也带来了不便性,需要后续继续解决。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-09-06
全网首发!Dify 2.0.0 图文混排上线,每个新功能都是爆款!附实战教程(建议收藏)
2025-09-06
Dify 参数提取器用法剖析
2025-09-06
Dify 夏日更新速递|功能概览
2025-09-06
夏日终章,Dify 放出“解暑大招”——v1.7→v1.8 升级包,专治各种“流程便秘”!
2025-09-06
Dify v2.0.0-beta.1悄悄的来啦!看看有哪些大更新?
2025-09-05
Dify 1.8.1发布了,看看带来了哪些变化?
2025-09-04
Dify发布了V1.8.1版本,专注于提升稳定性、性能和开发者体验,解决部分关键问题,让我们一起来看看吧!
2025-09-04
Dify部署避坑指南:5大方案解决PostgreSQL和Redis连接错误
2025-06-25
2025-06-30
2025-06-29
2025-06-24
2025-07-02
2025-06-26
2025-07-11
2025-06-25
2025-06-17
2025-08-19
2025-09-06
2025-09-05
2025-08-29
2025-08-18
2025-08-02
2025-07-30
2025-06-26
2025-06-17