如何快速实现Dify与本地LDAP系统对接

188 阅读2分钟

如何快速实现Dify与本地LDAP系统对接

在之前的方案中,我们基于OAuth2.0协议实现了Dify单点登录,但是在实际使用过程中发现存在部分弊端,具体来说:【AI大模型教程】

    在平台单点登录时浏览器会缓存平台Token,然后Dify应用后台会进行二次登录,浏览器又会缓存应用Token。但是在Dify退出时,仅清除了本地Dify应用Token,没有清除本地平台Token。

    这样就导致退出后我们再次通过OA单点登录,要么会将直接进入系统,又或者是本地缓存的平台Token过期,导致平台登录失败,这在一定程度上也影响用户使用体验。

    我也尝试在Dify退出接口中增加清除浏览器平台Token缓存的动作,因为时间关系,并没有深入研究。这里最终采用在Dify后台登录接口中直接与LDAP系统对接,这样仅需要对后台接口进行调整,前端页面保持不变即可。

一、代码调整

1、定位login接口实现位置:

api/controllers/console/auth/login.py,具体校验逻辑代码位于(这里没有改动点):

2、跳转到AccountService实现类,

位置api/services/account_service.py,并增加以下代码

其中:

(1)LDAP_AUTH_ENABLE为新增一个环境变量,

需要在api/configs/feature/__init__.py下增加LDAP_AUTH_ENABLE变量

(2)ldap_auth()为单独实现的LDAP对接方法,各自实现方式不同,这里就不再展开。

(3)为了减少对原有代码的侵占,单独实现用户账号生成逻辑generate_account()。具体实现逻辑如下:

    基本实现逻辑思路和之前的OAuth对接时创建账号类似,不在赘述。

二、配置文件调整

    1、docker-compose.yaml增加两个配置:

ALLOW_REGISTER: ALLOW_REGISTER:trueLDAP_AUTH_ENABLE:{ALLOW\_REGISTER:-true} LDAP\_AUTH\_ENABLE: {LDAP_AUTH_ENABLE:-true}

    其中,ALLOW_REGISTER需设置为true,否则系统用户不会自动注册到Dify里面。

   2、 .env 文件同样需要增加

ALLOW_REGISTER=true LDAP_AUTH_ENABLE=true

三、写在最后

    至此,便完成了Dify对接LDAP系统实现用户登录。相比较之前方案,仅需要修改后台代码,这对我这种前端一窍不通的开发来讲还是相当友好。因为涉及到多个文件的修改,建议单独编译一个本地镜像版本。具体编译过程可参考之前的文章。就这样吧,回见~