{"repo":"lework/dify-sso","free":true,"listed":false,"github":"https://github.com/lework/dify-sso","clone":"git clone https://github.com/lework/dify-sso.git","description":"dify login extension sso, oidc","language":"Python","stars":75,"topics":["dify","oidc","sso"],"license":"MIT","category":"auth-billing-email","readme_excerpt":"Dify SSO 集成 这个项目实现了 Dify 的企业 SSO 集成，当前支持 OIDC 协议。 功能特性 - OIDC 登录集成 - 支持用户数据库自动创建和关联 - 支持用户角色自动更新 技术栈 - Python 3.8+ - Flask - SQLAlchemy - PostgreSQL - Redis - Flask-Login - Pydantic Settings - PyJWT 系统要求 - Python 3.8 或更高版本 - PostgreSQL 12 或更高版本 - Redis 6 或更高版本 - 支持 OIDC 的身份提供商 项目结构 配置说明 项目采用模块化配置系统，所有配置通过 Pydantic Settings 进行管理，支持环境变量和 .env 文件配置。 OIDC SSO 集成需要以下环境变量配置： 安装与运行 使用 Docker 1. 构建镜像： 2. 运行容器： 本地开发 1. 克隆仓库： 2. 创建并激活虚拟环境： 3. 安装依赖： 4. 配置环境变量： 5. 运行应用： 接入流程 1. 创建 sso 服务商 在SSO服务商中配置 scope roles 后，便可在用户登录时分配相应角色。系统默认角色为 normal，如需设置其他角色，请在 .env 文件中将 ACCOUNT DEFAULT ROLE 配置为所需的角色。 2. 启动 dify-sso 容器 3. 在 dify-proxy 的 nginx 配置文件中添加以下配置： nginx 完整的配置看default.conf.template 如果 dify-proxy 是部署在 k8s 中。 可使用 k8s-deployment.yaml 文件部署 dify-sso 。 如果 dify-proxy 是部署在 docker 中。 可使用 docker-compose.yaml 文件部署 dify-sso 。 API 端点 OIDC SSO 集成提供以下 API 端点： - GET /console/api/enterprise/sso/oidc/login : 启动 OIDC 登录流程，将用户重定向到 OIDC 提供商 - GET /console/api/enterprise/sso/oidc/callback : OIDC 回调处理，处理授权码并获取用户信息 - GET /console/api/system-features : 获取系统功能配置 - GET /console/api/enterprise/info : 获取企业信息 OIDC 认证流程 OIDC 登录流程遵循标准的授权码流程（Authorization Code Flow）： 1. 用户访问 /console/api/enterprise/sso/oidc/login 端点 2. 系统生成授权 URL，重定向用户到 OIDC 提供商的登录页面 3. 用户在 OIDC 提供商处认证 4. OIDC 提供商将用户重定向回 /console/api/enterprise/sso/oidc/callback ，带有授权码 5. 系统使用授权码获取访问令牌和 ID 令牌 6. 系统使用访问令牌获取用户信息 7. 系统通过 OIDC 用户信息中的 sub 或 email 查询数据库，确认用户是否存在： - 如果用户存在，更新其信息（如姓名）并记录登录时间和 IP，当用户角色与 SSO 服务商配置的角色不一致，则更新用户角色 - 如果用户不存在，创建新用户并关联到默认租户 8. 系统生成 JWT","default_branch":null,"files":null,"tree":[],"storefront":"/r/lework","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/lework/dify-sso/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}