必须升级至dify v1.3.0+并采用docker compose部署,配置oauth2/oidc sso,正确设置idp的client id/secret、redirect uri及用户属性映射(如username_key、email_key),方可实现企业oa账号一键登录,不输密码、不建新账户、不泄露凭证。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要在Dify私有化环境中让员工用企业OA账号一键登录,不输密码、不建新账户、不泄露凭证,必须完成SSO协议对接与服务端双向信任配置,否则所有用户仍需在Dify单独注册。
确认Dify版本与部署模式是否支持SSO
登录Dify管理后台 → 点击左下角【设置】→ 查看【系统信息】页中的“版本号”。【仅 v1.3.0 及以上版本支持OIDC/OAuth2 SSO配置】。若显示为v1.2.x或更低,后续所有SSO开关和字段均不可见,必须先升级镜像并重建容器。
检查部署方式:执行 docker ps | grep dify-api,确认存在 dify-api 容器。若为 python manage.py runserver 直启模式,SSO中间件默认未加载,无法启用任何第三方认证。
准备身份提供者(IdP)端配置项
在你的企业IdP后台(如Keycloak、Azure AD、Casdoor或自建OAuth2服务)中创建一个新客户端,类型必须选“Confidential”(机密类型),获取以下四项参数:
Client ID:IdP分配给Dify的唯一应用标识符
Client Secret:【复制后立即保存,页面刷新后将不可见】
Authorization URL:例如 https://sso.corp.com/oauth/authorize
Token URL:例如 https://sso.corp.com/oauth/token
User Info URL:例如 https://sso.corp.com/api/userinfo
Redirect URI:【必须严格填写为 https://your-dify-domain.com/login/oauth/callback,并在IdP白名单中显式注册】
配置Dify服务端环境变量(Docker Compose模式)
编辑 docker-compose.yaml 文件,在 dify-api 服务的 environment 区块中添加以下内容:
```yaml
environment:
- AUTH_TYPE=oauth2
- OAUTH2_CLIENT_ID=your-client-id-from-idp
- OAUTH2_CLIENT_SECRET=your-client-secret-from-idp
- OAUTH2_AUTHORIZE_URL=https://sso.corp.com/oauth/authorize
- OAUTH2_TOKEN_URL=https://sso.corp.com/oauth/token
- OAUTH2_USER_INFO_URL=https://sso.corp.com/api/userinfo
- OAUTH2_REDIRECT_URI=https://your-dify-domain.com/login/oauth/callback
- OAUTH2_USERNAME_KEY=email
- OAUTH2_NAME_KEY=name
- OAUTH2_EMAIL_KEY=email
```
其中 OAUTH2_USERNAME_KEY 和 OAUTH2_EMAIL_KEY 必须与IdP返回的JSON字段名完全一致,否则用户无法自动映射注册,前端会报“Failed to fetch user info”错误。
启用SSO并在控制台完成映射
① 使用管理员账号登录Dify → 进入【设置】→ 【认证设置】→ 【单点登录(SSO)】
② 将开关切换为“启用”,协议类型选择“OAuth2”(若IdP支持OIDC,优先选OIDC)
③ 填写用户属性映射:
• 用户名字段 → 填写IdP返回的用户名键名(如 employee_id 或 preferred_username)
• 邮箱字段 → 必须填 email,且IdP返回值需为标准邮箱格式,否则注册失败
• 昵称字段 → 可选填 name 或 display_name
④ 点击【保存】,此时Dify已启用OAuth2路由拦截,所有未登录请求将重定向至IdP登录页。
验证SSO流程是否生效
方法一:无痕窗口访问 https://your-dify-domain.com,观察是否自动跳转至企业SSO登录页;登录成功后是否返回Dify首页且右上角显示用户名。
方法二:打开浏览器开发者工具 → Network标签页 → 刷新页面 → 查找 /login/oauth/authorize 请求,确认响应状态码为302且 Location 头指向IdP地址。
方法三:查看 dify-api 容器日志:docker logs -f dify-api | grep "oauth",出现 Redirecting to OAuth2 provider 即表示流程已触发。











