update sso doc (#4358)
This commit is contained in:
parent
8999dc5b8c
commit
8b29aae238
BIN
docSite/assets/imgs/teammode.png
Normal file
BIN
docSite/assets/imgs/teammode.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 265 KiB |
@ -4,35 +4,24 @@ description: 'FastGPT V4.9.2 更新说明'
|
|||||||
icon: 'upgrade'
|
icon: 'upgrade'
|
||||||
draft: false
|
draft: false
|
||||||
toc: true
|
toc: true
|
||||||
weight: 799
|
weight: 798
|
||||||
---
|
---
|
||||||
## 更新指南
|
## 更新指南
|
||||||
|
|
||||||
v4.9.2 升级需要迁移已有的 SSO 相关配置。
|
### SSO 迁移
|
||||||
|
|
||||||
### 影响范围
|
使用了 SSO 或成员同步的商业版用户,并且是对接`钉钉`、`企微`的,需要迁移已有的 SSO 相关配置:
|
||||||
|
|
||||||
使用:
|
参考:[SSO & 外部成员同步](/docs/guide/admin/sso.md)中的配置进行`sso-service`的部署和配置。
|
||||||
|
|
||||||
1. 钉钉
|
1. 先将原商业版后台中的相关配置项复制备份出来(以企微为例,将 AppId, Secret 等复制出来)再进行镜像升级。
|
||||||
2. 飞书
|
|
||||||
3. 企微
|
|
||||||
接入 FastGPT 的系统,需要额外部署 FastGPT-sso-service 中转镜像服务。
|
|
||||||
|
|
||||||
### 迁移步骤
|
|
||||||
|
|
||||||
参考:[SSO & 外部成员同步](/docs/guide/admin/sso.md)中的配置进行迁移。
|
|
||||||
1. 将原商业版后台中的相关配置项复制备份出来(以企微为例,将 AppId, Secret 等复制出来)
|
|
||||||
2. 参考上述文档,部署 SSO 服务,配置相关的环境变量
|
2. 参考上述文档,部署 SSO 服务,配置相关的环境变量
|
||||||
3. 如果原先使用组织架构和用户同步功能,在商业版后台切换团队模式为“同步模式”
|
3. 如果原先使用企微组织架构同步的用户,在商业版后台切换团队模式为“同步模式”
|
||||||
|
|
||||||

|
## 重要更新
|
||||||
|
|
||||||
## 重要提示
|
|
||||||
|
|
||||||
- 知识库导入数据 API 变更,增加`chunkSettingMode`,`chunkSplitMode`,`indexSize`可选参数,具体可参考 [知识库导入数据 API](/docs/development/openapi/dataset) 文档。
|
- 知识库导入数据 API 变更,增加`chunkSettingMode`,`chunkSplitMode`,`indexSize`可选参数,具体可参考 [知识库导入数据 API](/docs/development/openapi/dataset) 文档。
|
||||||
|
|
||||||
|
|
||||||
## 🚀 新增内容
|
## 🚀 新增内容
|
||||||
|
|
||||||
1. 知识库分块优化:支持单独配置分块大小和索引大小,允许进行超大分块,以更大的输入 Tokens 换取完整分块。
|
1. 知识库分块优化:支持单独配置分块大小和索引大小,允许进行超大分块,以更大的输入 Tokens 换取完整分块。
|
||||||
|
|||||||
@ -6,16 +6,17 @@ draft: false
|
|||||||
toc: true
|
toc: true
|
||||||
weight: 707
|
weight: 707
|
||||||
---
|
---
|
||||||
## 外部成员系统接入设计
|
|
||||||
|
|
||||||
### 介绍
|
如果你不需要用到 SSO/成员同步功能,或者是只需要用 Github、google、microsoft、公众号的快速登录,可以跳过本章节。本章适合需要接入自己的成员系统或主流 办公IM 的用户。
|
||||||
|
|
||||||
|
## 介绍
|
||||||
|
|
||||||
为了方便地接入**外部成员系统**,FastGPT 提供一套接入外部系统的**标准接口**,以及一个 FastGPT-SSO-Service 镜像作为**适配器**。
|
为了方便地接入**外部成员系统**,FastGPT 提供一套接入外部系统的**标准接口**,以及一个 FastGPT-SSO-Service 镜像作为**适配器**。
|
||||||
|
|
||||||
可以实现:
|
通过这套标注接口,你可以可以实现:
|
||||||
|
|
||||||
1. SSO 登录
|
1. SSO 登录。从外部系统回调后,在 FastGPT 中创建一个用户。
|
||||||
2. 成员和组织架构同步(下面都简称成员同步)
|
2. 成员和组织架构同步(下面都简称成员同步)。
|
||||||
|
|
||||||
**原理**
|
**原理**
|
||||||
|
|
||||||
@ -23,172 +24,9 @@ FastGPT-pro 中,有一套标准的SSO 和成员同步接口,系统会根据
|
|||||||
|
|
||||||
FastGPT-SSO-Service 是为了聚合不同来源的 SSO 和成员同步接口,将他们转成 fastgpt-pro 可识别的接口。
|
FastGPT-SSO-Service 是为了聚合不同来源的 SSO 和成员同步接口,将他们转成 fastgpt-pro 可识别的接口。
|
||||||
|
|
||||||
### 内置的通用协议/IM
|
## 系统配置教程
|
||||||
|
|
||||||
{{< table "table-hover table-striped-columns" >}}
|
### 1. 部署 SSO-service 镜像
|
||||||
| 协议/功能 | SSO 支持 | 成员同步支持 |
|
|
||||||
|----------------|----------|--------------|
|
|
||||||
| 飞书 | 是 | 是 |
|
|
||||||
| 企业微信(企微)| 是 | 是 |
|
|
||||||
| 钉钉 | 是 | 否 |
|
|
||||||
| Saml2.0 | 是 | 否 |
|
|
||||||
| Oauth2.0 | 是 | 否 |
|
|
||||||
{{< /table >}}
|
|
||||||
|
|
||||||
### 系统配置教程
|
|
||||||
|
|
||||||
首先确认外部成员系统是否可以通过中转镜像进行接入,如果可以,则可以直接部署,如果不可以,请看本文最后的“如何对接非标准系统”。
|
|
||||||
|
|
||||||
1. 首先需要参考后文的**通用外部成员系统配置**进行配置。
|
|
||||||
|
|
||||||
2. 在商业版后台配置按钮文字,图标等。
|
|
||||||
|
|
||||||
{{< table "table-hover table-striped-columns" >}}
|
|
||||||
| <div style="text-align:center">企业微信</div> | <div style="text-align:center">钉钉</div> | <div style="text-align:center">飞书</div> |
|
|
||||||
|-----------|-----------------|--------------|
|
|
||||||
|  |  |  |
|
|
||||||
{{< /table >}}
|
|
||||||
|
|
||||||
3. 设置“团队模式”为“同步模式”。
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
#### 可选配置
|
|
||||||
|
|
||||||
1. 自动定时成员同步
|
|
||||||
|
|
||||||
设置 fastgpt-pro 环境变量则可开启自动成员同步
|
|
||||||
|
|
||||||
```bash
|
|
||||||
SYNC_MEMBER_CRON="0 0 * * *" # Cron 表达式,每天 0 点执行
|
|
||||||
```
|
|
||||||
|
|
||||||
### 标准接口文档
|
|
||||||
|
|
||||||
#### SSO
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
FastGPT 提供如下标准接口支持:
|
|
||||||
|
|
||||||
1. example.com/getAuthURL 获取鉴权重定向地址
|
|
||||||
2. example.com/login/oauth/getUserInfo?code=xxxxx 消费 code,换取用户信息
|
|
||||||
|
|
||||||
##### GET /login/oauth/getAuthURL
|
|
||||||
|
|
||||||
该接口用于获取第三方用户系统的oauth登陆地址。
|
|
||||||
|
|
||||||
登陆地址中需要的参数,包括 client_id, secret 等都应该拼接好。
|
|
||||||
|
|
||||||
redirec_uri 应该为 FastGPT 前端服务的 /login/provider 路径:
|
|
||||||
|
|
||||||
https://fastgpt.cn/login/provider
|
|
||||||
|
|
||||||
返回值类型如下(JSON):
|
|
||||||
|
|
||||||
```JSON
|
|
||||||
{
|
|
||||||
"success": true,
|
|
||||||
"message": "错误信息",
|
|
||||||
"authURL": "https://example.com/somepath/login/oauth?redirect_uri=https%3A%2F%2Ffastgpt.cn%2Flogin%2Fprovider%0A"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
重定向地址 redirect_uri 应该是 fastgpt 的 /login/provider 路径。
|
|
||||||
|
|
||||||
例如 fastgpt.example.com/login/provider (提示:需要进行 urlencode)
|
|
||||||
|
|
||||||
##### GET /login/oauth/getUserInfo?code=xxxxxx
|
|
||||||
|
|
||||||
该接口接受一个 code 参数作为鉴权,消费 code 返回用户信息。
|
|
||||||
|
|
||||||
https://oauth.example/login/oauth/getUserInfo?code=xxxx
|
|
||||||
|
|
||||||
返回如下信息(JSON):
|
|
||||||
|
|
||||||
```JSON
|
|
||||||
{
|
|
||||||
"success": true,
|
|
||||||
"message": "错误信息",
|
|
||||||
"username": "用户名,用于注册 fastgpt,全局唯一的, fastgpt不会自动拼接任何前缀",
|
|
||||||
"avatar": "头像,可以为空",
|
|
||||||
"contact": "联系方式,最好不为空"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 成员同步
|
|
||||||
|
|
||||||
成员同步分为**人员同步**和**组织同步**,FastGPT 会向同步服务依次发送**组织同步**和**人员同步**两个请求。
|
|
||||||
|
|
||||||
1. org/list 同步所有的组织
|
|
||||||
2. user/list 同步所有的人员
|
|
||||||
|
|
||||||
上述两个接口通过 header Authorization 中的 Bearer xxxxx 方式进行鉴权。
|
|
||||||
|
|
||||||
##### 组织同步
|
|
||||||
|
|
||||||
1. 同步组织 /org/list
|
|
||||||
|
|
||||||
GET https://example.com/org/list
|
|
||||||
|
|
||||||
⚠️注意:只能存在一个根部门。如果你的系统中存在多个根部门,需要先进行处理,加一个虚拟的根部门。
|
|
||||||
返回值类型:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
type OrgListResponseType = {
|
|
||||||
message?: string; // 报错信息
|
|
||||||
success: boolean;
|
|
||||||
orgList: {
|
|
||||||
id: string; // 部门的唯一 id
|
|
||||||
name: string; // 名字
|
|
||||||
parentId: string; // parentId,如果为根部门,传空字符串。
|
|
||||||
}[];
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
##### 人员同步
|
|
||||||
|
|
||||||
1. 同步用户 /user/list
|
|
||||||
|
|
||||||
GET https://example.com/user/list
|
|
||||||
|
|
||||||
返回值类型:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
type UserListResponseListType = {
|
|
||||||
message?: string; // 报错信息
|
|
||||||
success: boolean;
|
|
||||||
userList: {
|
|
||||||
username: string; // 唯一 id username 必须与 SSO 接口返回的用户 username 相同
|
|
||||||
// 必须携带一个前缀,例如: sync-aaaaa,和 sso 接口返回的前缀一致
|
|
||||||
memberName?: string; // 名字,作为 tmbname
|
|
||||||
avatar?: string;
|
|
||||||
contact?: string; // email or phone number
|
|
||||||
orgs?: string[]; // 人员所在组织的 ID。没有组织传 []
|
|
||||||
}[];
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 如何对接非标准系统
|
|
||||||
|
|
||||||
1. 客户自己开发:按 fastgpt 提供的标准接口进行开发,并将部署后的服务地址填入 fastgpt-pro
|
|
||||||
|
|
||||||
a. 可以参考该模版库:https://github.com/labring/fastgpt-sso-template 进行开发
|
|
||||||
2. 由 fastgpt 团队定制开发:
|
|
||||||
|
|
||||||
a. 提供系统的 SSO 文档、获取成员和组织的文档、以及外网测试地址。
|
|
||||||
|
|
||||||
b. 在 fastgpt-sso-service 中,增加对应的 provider 和环境变量,并编写代码来对接,具体参考开发 README。
|
|
||||||
|
|
||||||
## 通用外部成员系统配置
|
|
||||||
|
|
||||||
### 外部成员系统中转镜像部署
|
|
||||||
|
|
||||||
SSO 中转镜像(FastGPT-SSO-Service)本质是一个**适配器**,将不同的 oauth 逻辑封装为上述的逻辑。
|
|
||||||
|
|
||||||
目前提供企业微信,钉钉,飞书的适配。
|
|
||||||
|
|
||||||
如果需要适配您企业的用户系统,需要联系我们。
|
|
||||||
|
|
||||||
使用 docker-compose 部署:
|
使用 docker-compose 部署:
|
||||||
|
|
||||||
@ -199,35 +37,64 @@ SSO 中转镜像(FastGPT-SSO-Service)本质是一个**适配器**,将不同
|
|||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
- fastgpt
|
- fastgpt
|
||||||
environment: # 具体环境变量看下面
|
environment:
|
||||||
- SSO_PROVIDER=example
|
- SSO_PROVIDER=example
|
||||||
- AUTH_TOKEN=xxxxx
|
- AUTH_TOKEN=xxxxx # 鉴权信息,fastgpt-pro 会用到。
|
||||||
# other envs
|
# 具体对接提供商的环境变量。
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
**注意**
|
根据不同的提供商,你需要配置不同的环境变量,下面是内置的通用协议/IM:
|
||||||
|
|
||||||
1. 不需要暴露端口出来。
|
{{< table "table-hover table-striped-columns" >}}
|
||||||
2. 确保和 fastgpt-pro, fastgpt 在同一个网路中
|
| 协议/功能 | SSO | 成员同步支持 |
|
||||||
3. 容器暴露的端口为 3000
|
|----------------|----------|--------------|
|
||||||
4. AUTH_TOKEN 应当与 fastgpt-pro 中一致。
|
| 飞书 | 是 | 是 |
|
||||||
|
| 企业微信 | 是 | 是 |
|
||||||
|
| 钉钉 | 是 | 否 |
|
||||||
|
| Saml2.0 | 是 | 否 |
|
||||||
|
| Oauth2.0 | 是 | 否 |
|
||||||
|
{{< /table >}}
|
||||||
|
|
||||||
#### FastGPT-pro 商业版 的配置
|
### 2. 配置 fastgpt-pro
|
||||||
|
|
||||||
|
#### 1. 配置环境变量
|
||||||
|
|
||||||
环境变量中的 `EXTERNAL_USER_SERVICE_BASE_URL` 为内网地址,例如上述例子中的配置,环境变量应该设置为
|
环境变量中的 `EXTERNAL_USER_SERVICE_BASE_URL` 为内网地址,例如上述例子中的配置,环境变量应该设置为
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
EXTERNAL_USER_SERVICE_BASE_URL=http://fastgpt-sso:3000
|
EXTERNAL_USER_SERVICE_BASE_URL=http://fastgpt-sso:3000
|
||||||
EXTERNAL_USER_SERVICE_AUTH_TOKEN=xxxxx
|
EXTERNAL_USER_SERVICE_AUTH_TOKEN=xxxxx
|
||||||
}
|
|
||||||
```
|
```
|
||||||
|
|
||||||
> 如果环境变量设置后还未生效,可能需要点击一次“保存”按钮
|
#### 2. 在商业版后台配置按钮文字,图标等。
|
||||||
|
|
||||||
|
{{< table "table-hover table-striped-columns" >}}
|
||||||
|
| <div style="text-align:center">企业微信</div> | <div style="text-align:center">钉钉</div> | <div style="text-align:center">飞书</div> |
|
||||||
|
|-----------|-----------------|--------------|
|
||||||
|
|  |  |  |
|
||||||
|
{{< /table >}}
|
||||||
|
|
||||||
|
#### 3. 开启成员同步(可选)
|
||||||
|
|
||||||
|
如果需要同步外部系统的成员,可以选择开启成员同步。团队模式具体可参考:[团队模式说明文档](/docs/guide/admin/teamMode)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
#### 4. 可选配置
|
||||||
|
|
||||||
|
1. 自动定时成员同步
|
||||||
|
|
||||||
|
设置 fastgpt-pro 环境变量则可开启自动成员同步
|
||||||
|
|
||||||
|
```bash
|
||||||
|
SYNC_MEMBER_CRON="0 0 * * *" # Cron 表达式,每天 0 点执行
|
||||||
|
```
|
||||||
|
|
||||||
|
## 内置的通用协议/IM 配置示例
|
||||||
|
|
||||||
### 飞书
|
### 飞书
|
||||||
|
|
||||||
1. **参数获取**
|
#### 1. 参数获取
|
||||||
|
|
||||||
App ID和App Secret
|
App ID和App Secret
|
||||||
|
|
||||||
@ -235,7 +102,7 @@ EXTERNAL_USER_SERVICE_AUTH_TOKEN=xxxxx
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
2. **权限配置**
|
#### 2. 权限配置
|
||||||
|
|
||||||
进入开发者后台,点击企业自建应用,在开发配置的权限管理页面开通权限。
|
进入开发者后台,点击企业自建应用,在开发配置的权限管理页面开通权限。
|
||||||
|
|
||||||
@ -250,41 +117,49 @@ EXTERNAL_USER_SERVICE_AUTH_TOKEN=xxxxx
|
|||||||
|
|
||||||
对于开启企业同步相关内容而言,开启身份权限的内容与上面一致,但要注意是开启应用权限
|
对于开启企业同步相关内容而言,开启身份权限的内容与上面一致,但要注意是开启应用权限
|
||||||
|
|
||||||
3. **重定向URL**
|
#### 3. 重定向URL
|
||||||
|
|
||||||
进入开发者后台,点击企业自建应用,在开发配置的安全设置中设置重定向URL
|
进入开发者后台,点击企业自建应用,在开发配置的安全设置中设置重定向URL
|
||||||

|

|
||||||
|
|
||||||
4. **环境变量配置**
|
#### 4. yml 配置示例
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# #飞书 - feishu -如果是私有化部署,这里的配置前缀可能会有变化
|
fastgpt-sso:
|
||||||
# #(以下皆为官方api接口)
|
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sso-service:v4.9.0
|
||||||
# SSO_PROVIDER=feishu
|
container_name: fastgpt-sso
|
||||||
# # oauth 接口
|
restart: always
|
||||||
# SSO_TARGET_URL=https://accounts.feishu.cn/open-apis/authen/v1/authorize
|
networks:
|
||||||
# #获取token 接口
|
- fastgpt
|
||||||
# FEISHU_TOKEN_URL=https://open.feishu.cn/open-apis/authen/v2/oauth/token
|
environment:
|
||||||
# #获取用户信息接口
|
- SSO_PROVIDER=example
|
||||||
# FEISHU_GET_USER_INFO_URL=https://open.feishu.cn/open-apis/authen/v1/user_info
|
- AUTH_TOKEN=xxxxx
|
||||||
# #重定向地址,因为飞书获取用户信息要校验所以需要填
|
# 飞书 - feishu -如果是私有化部署,这里的配置前缀可能会有变化
|
||||||
# FEISHU_REDIRECT_URI=xxx
|
- SSO_PROVIDER=feishu
|
||||||
# #飞书APP的应用ID,一般以cli开头
|
# oauth 接口(公开的飞书不用改)
|
||||||
# FEISHU_APP_ID=xxx
|
- SSO_TARGET_URL=https://accounts.feishu.cn/open-apis/authen/v1/authorize
|
||||||
# #飞书APP的应用密钥
|
# 获取token 接口(公开的飞书不用改)
|
||||||
# FEISHU_APP_SECRET=xxx
|
- FEISHU_TOKEN_URL=https://open.feishu.cn/open-apis/authen/v2/oauth/token
|
||||||
```
|
# 获取用户信息接口(公开的飞书不用改)
|
||||||
|
- FEISHU_GET_USER_INFO_URL=https://open.feishu.cn/open-apis/authen/v1/user_info
|
||||||
|
# 重定向地址,因为飞书获取用户信息要校验所以需要填
|
||||||
|
- FEISHU_REDIRECT_URI=xxx
|
||||||
|
#飞书APP的应用ID,一般以cli开头
|
||||||
|
- FEISHU_APP_ID=xxx
|
||||||
|
#飞书APP的应用密钥
|
||||||
|
- FEISHU_APP_SECRET=xxx
|
||||||
|
```
|
||||||
|
|
||||||
### 钉钉
|
### 钉钉
|
||||||
|
|
||||||
1. **参数获取**
|
#### 1. 参数获取
|
||||||
|
|
||||||
CLIENT_ID与CLIENT_SECRET
|
CLIENT_ID 与 CLIENT_SECRET
|
||||||
|
|
||||||
进入钉钉开放平台,点击应用开发,选择自己的应用进入,记录在凭证与基础信息页面下的Client ID与Client secret。
|
进入钉钉开放平台,点击应用开发,选择自己的应用进入,记录在凭证与基础信息页面下的Client ID与Client secret。
|
||||||

|

|
||||||
|
|
||||||
2. **权限配置**
|
#### 2. 权限配置
|
||||||
|
|
||||||
进入钉钉开放平台,点击应用开发,选择自己的应用进入,在开发配置的权限管理页面操作,需要开通的权限包括:
|
进入钉钉开放平台,点击应用开发,选择自己的应用进入,在开发配置的权限管理页面操作,需要开通的权限包括:
|
||||||
|
|
||||||
@ -292,7 +167,7 @@ EXTERNAL_USER_SERVICE_AUTH_TOKEN=xxxxx
|
|||||||
2. ***通讯录个人信息读权限***
|
2. ***通讯录个人信息读权限***
|
||||||
3. ***获取钉钉开放接口用户访问凭证的基础权限***
|
3. ***获取钉钉开放接口用户访问凭证的基础权限***
|
||||||
|
|
||||||
3. **重定向URL**
|
#### 3. 重定向URL
|
||||||
|
|
||||||
进入钉钉开放平台,点击应用开发,选择自己的应用进入,在开发配置的安全设置页面操作
|
进入钉钉开放平台,点击应用开发,选择自己的应用进入,在开发配置的安全设置页面操作
|
||||||
需要填写的内容有两个:
|
需要填写的内容有两个:
|
||||||
@ -300,26 +175,33 @@ EXTERNAL_USER_SERVICE_AUTH_TOKEN=xxxxx
|
|||||||
1. 服务器出口IP (调用钉钉服务端API的服务器IP列表)
|
1. 服务器出口IP (调用钉钉服务端API的服务器IP列表)
|
||||||
2. 重定向URL(回调域名)
|
2. 重定向URL(回调域名)
|
||||||
|
|
||||||
4. **环境变量配置**
|
#### 4. yml 配置示例
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# #钉钉 - dingtalk
|
fastgpt-sso:
|
||||||
# SSO_PROVIDER=dingtalk
|
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sso-service:v4.9.0
|
||||||
# #oauth 接口
|
container_name: fastgpt-sso
|
||||||
# SSO_TARGET_URL=https://login.dingtalk.com/oauth2/auth
|
restart: always
|
||||||
# #获取token 接口
|
networks:
|
||||||
# DINGTALK_TOKEN_URL=https://api.dingtalk.com/v1.0/oauth2/userAccessToken
|
- fastgpt
|
||||||
# #获取用户信息接口
|
environment:
|
||||||
# DINGTALK_GET_USER_INFO_URL=https://oapi.dingtalk.com/v1.0/contact/users/me
|
- SSO_PROVIDER=dingtalk
|
||||||
# #钉钉APP的应用ID
|
- AUTH_TOKEN=xxxxx
|
||||||
# DINGTALK_CLIENT_ID=xxx
|
#oauth 接口
|
||||||
# #钉钉APP的应用密钥
|
- SSO_TARGET_URL=https://login.dingtalk.com/oauth2/auth
|
||||||
# DINGTALK_CLIENT_SECRET=xxx
|
#获取token 接口
|
||||||
```
|
- DINGTALK_TOKEN_URL=https://api.dingtalk.com/v1.0/oauth2/userAccessToken
|
||||||
|
#获取用户信息接口
|
||||||
|
- DINGTALK_GET_USER_INFO_URL=https://oapi.dingtalk.com/v1.0/contact/users/me
|
||||||
|
#钉钉APP的应用ID
|
||||||
|
- DINGTALK_CLIENT_ID=xxx
|
||||||
|
#钉钉APP的应用密钥
|
||||||
|
- DINGTALK_CLIENT_SECRET=xxx
|
||||||
|
```
|
||||||
|
|
||||||
### 企业微信
|
### 企业微信
|
||||||
|
|
||||||
#### **参数获取**
|
#### 1. 参数获取
|
||||||
|
|
||||||
1. 企业的 CorpID
|
1. 企业的 CorpID
|
||||||
|
|
||||||
@ -372,67 +254,187 @@ EXTERNAL_USER_SERVICE_AUTH_TOKEN=xxxxx
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
#### **环境变量**
|
#### 2. yml 配置示例
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
## 企业微信 - wecom
|
fastgpt-sso:
|
||||||
# SSO_PROVIDER=wecom
|
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sso-service:v4.9.0
|
||||||
# (以下皆为官方api接口)
|
container_name: fastgpt-sso
|
||||||
# oauth 接口,在企微终端使用
|
restart: always
|
||||||
# WECOM_TARGET_URL_OAUTH=https://open.weixin.qq.com/connect/oauth2/authorize
|
networks:
|
||||||
# # sso 接口,扫码
|
- fastgpt
|
||||||
# WECOM_TARGET_URL_SSO=https://login.work.weixin.qq.com/wwlogin/sso/login
|
environment:
|
||||||
# # 获取用户id(只能拿id)
|
- AUTH_TOKEN=xxxxx
|
||||||
# WECOM_GET_USER_ID_URL=https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo
|
- SSO_PROVIDER=wecom
|
||||||
# # 获取用户详细信息(除了名字都有)
|
# oauth 接口,在企微终端使用
|
||||||
# WECOM_GET_USER_INFO_URL=https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail
|
- WECOM_TARGET_URL_OAUTH=https://open.weixin.qq.com/connect/oauth2/authorize
|
||||||
# # 获取用户信息(有名字,没其他信息)
|
# sso 接口,扫码
|
||||||
# WECOM_GET_USER_NAME_URL=https://qyapi.weixin.qq.com/cgi-bin/user/get
|
- WECOM_TARGET_URL_SSO=https://login.work.weixin.qq.com/wwlogin/sso/login
|
||||||
# # 获取组织 id 列表
|
# 获取用户id(只能拿id)
|
||||||
# WECOM_GET_DEPARTMENT_LIST_URL=https://qyapi.weixin.qq.com/cgi-bin/department/list
|
- WECOM_GET_USER_ID_URL=https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo
|
||||||
# # 获取用户 id 列表
|
# 获取用户详细信息(除了名字都有)
|
||||||
# WECOM_GET_USER_LIST_URL=https://qyapi.weixin.qq.com/cgi-bin/user/list_id
|
- WECOM_GET_USER_INFO_URL=https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail
|
||||||
# # 企微 CorpId
|
# 获取用户信息(有名字,没其他信息)
|
||||||
# WECOM_CORPID=
|
- WECOM_GET_USER_NAME_URL=https://qyapi.weixin.qq.com/cgi-bin/user/get
|
||||||
# # 企微 App 的 AgentId 一般是 1000xxx
|
# 获取组织 id 列表
|
||||||
# WECOM_AGENTID=
|
- WECOM_GET_DEPARTMENT_LIST_URL=https://qyapi.weixin.qq.com/cgi-bin/department/list
|
||||||
# # 企微 App 的 Secret
|
# 获取用户 id 列表
|
||||||
# WECOM_APP_SECRET=
|
- WECOM_GET_USER_LIST_URL=https://qyapi.weixin.qq.com/cgi-bin/user/list_id
|
||||||
# # 通讯录同步助手的 Secret
|
# 企微 CorpId
|
||||||
# WECOM_SYNC_SECRET=
|
- WECOM_CORPID=
|
||||||
```
|
# 企微 App 的 AgentId 一般是 1000xxx
|
||||||
|
- WECOM_AGENTID=
|
||||||
|
# 企微 App 的 Secret
|
||||||
|
- WECOM_APP_SECRET=
|
||||||
|
# 通讯录同步助手的 Secret
|
||||||
|
- WECOM_SYNC_SECRET=
|
||||||
|
```
|
||||||
|
|
||||||
### 标准 OAuth2.0
|
### 标准 OAuth2.0
|
||||||
|
|
||||||
我们提供一套标准的 OAuth2.0 接入流程。
|
#### 参数需求
|
||||||
需要三个地址:
|
|
||||||
|
我们提供一套标准的 OAuth2.0 接入流程。需要三个地址:
|
||||||
|
|
||||||
1. 登陆鉴权地址(登陆后将 code 传入 redirect_uri)
|
1. 登陆鉴权地址(登陆后将 code 传入 redirect_uri)
|
||||||
- 需要将地址完整写好,除了 redirect_uri 以外(会自动补全)
|
- 需要将地址完整写好,除了 redirect_uri 以外(会自动补全)
|
||||||
2. 获取 access_token 的地址,请求为 GET 方法,参数 code
|
2. 获取 access_token 的地址,请求为 GET 方法,参数 code
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
http://example.com/oauth/access_token?code=xxxx
|
http://example.com/oauth/access_token?code=xxxx
|
||||||
```
|
```
|
||||||
|
|
||||||
3. 获取用户信息的地址
|
3. 获取用户信息的地址
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
http://example.
|
http://example.com/oauth/user_info
|
||||||
```
|
|
||||||
```bash
|
|
||||||
# # OAuth2.0
|
|
||||||
# # OAuth2 登陆鉴权地址
|
|
||||||
# OAUTH2_AUTHORIZE_URL=
|
|
||||||
# # OAuth2 获取 AccessToken 地址
|
|
||||||
# OAUTH2_TOKEN_URL=
|
|
||||||
# # OAuth2 获取用户信息地址
|
|
||||||
# OAUTH2_USER_INFO_URL=
|
|
||||||
# # OAuth2 用户名字段映射(必填)
|
|
||||||
# OAUTH2_USERNAME_MAP=
|
|
||||||
# # OAuth2 头像字段映射(选填)
|
|
||||||
# OAUTH2_AVATAR_MAP=
|
|
||||||
# # OAuth2 成员名字段映射(选填)
|
|
||||||
# OAUTH2_MEMBER_NAME_MAP=
|
|
||||||
# # OAuth2 联系方式字段映射(选填)
|
|
||||||
# OAUTH2_CONTACT_MAP=
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
#### 配置示例
|
||||||
|
|
||||||
|
```bash
|
||||||
|
fastgpt-sso:
|
||||||
|
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sso-service:v4.9.0
|
||||||
|
container_name: fastgpt-sso
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- fastgpt
|
||||||
|
environment:
|
||||||
|
# OAuth2.0
|
||||||
|
- AUTH_TOKEN=xxxxx
|
||||||
|
- SSO_PROVIDER=oauth2
|
||||||
|
# OAuth2 重定向地址
|
||||||
|
- OAUTH2_AUTHORIZE_URL=
|
||||||
|
# OAuth2 获取 AccessToken 地址
|
||||||
|
- OAUTH2_TOKEN_URL=
|
||||||
|
# OAuth2 获取用户信息地址
|
||||||
|
- OAUTH2_USER_INFO_URL=
|
||||||
|
# OAuth2 用户名字段映射(必填)
|
||||||
|
- OAUTH2_USERNAME_MAP=
|
||||||
|
# OAuth2 头像字段映射(选填)
|
||||||
|
- OAUTH2_AVATAR_MAP=
|
||||||
|
# OAuth2 成员名字段映射(选填)
|
||||||
|
- OAUTH2_MEMBER_NAME_MAP=
|
||||||
|
# OAuth2 联系方式字段映射(选填)
|
||||||
|
- OAUTH2_CONTACT_MAP=
|
||||||
|
```
|
||||||
|
|
||||||
|
## 标准接口文档
|
||||||
|
|
||||||
|
以下是 FastGPT-pro 中,SSO 和成员同步的标准接口文档,如果需要对接非标准系统,可以参考该章节进行开发。
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
FastGPT 提供如下标准接口支持:
|
||||||
|
|
||||||
|
1. https://example.com/getAuthURL 获取鉴权重定向地址
|
||||||
|
2. https://example.com/login/oauth/getUserInfo?code=xxxxx 消费 code,换取用户信息
|
||||||
|
3. https://example.com/org/list 获取组织列表
|
||||||
|
4. https://example.com/user/list 获取成员列表
|
||||||
|
|
||||||
|
### 获取登录重定向地址
|
||||||
|
|
||||||
|
返回一个重定向登录地址,fastgpt 会自动重定向到该地址。
|
||||||
|
|
||||||
|
redirect_uri 会自动拼接到该地址的 query中。
|
||||||
|
|
||||||
|
GET /login/oauth/getAuthURL
|
||||||
|
```JSON
|
||||||
|
{
|
||||||
|
"success": true,
|
||||||
|
"message": "错误信息",
|
||||||
|
"authURL": "https://example.com/somepath/login/oauth?redirect_uri=https%3A%2F%2Ffastgpt.cn%2Flogin%2Fprovider%0A"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 获取用户信息
|
||||||
|
|
||||||
|
该接口接受一个 code 参数作为鉴权,消费 code 返回用户信息。
|
||||||
|
|
||||||
|
https://oauth.example/login/oauth/getUserInfo?code=xxxx
|
||||||
|
|
||||||
|
GET /login/oauth/getUserInfo?code=xxxxxx
|
||||||
|
返回如下信息(JSON):
|
||||||
|
|
||||||
|
```JSON
|
||||||
|
{
|
||||||
|
"success": true,
|
||||||
|
"message": "错误信息",
|
||||||
|
"username": "用户名,用于注册 fastgpt,全局唯一的, fastgpt不会自动拼接任何前缀",
|
||||||
|
"avatar": "头像,可以为空",
|
||||||
|
"contact": "联系方式,最好不为空"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 获取组织
|
||||||
|
|
||||||
|
1. 同步组织 /org/list
|
||||||
|
|
||||||
|
GET https://example.com/org/list
|
||||||
|
|
||||||
|
⚠️注意:只能存在一个根部门。如果你的系统中存在多个根部门,需要先进行处理,加一个虚拟的根部门。
|
||||||
|
返回值类型:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
type OrgListResponseType = {
|
||||||
|
message?: string; // 报错信息
|
||||||
|
success: boolean;
|
||||||
|
orgList: {
|
||||||
|
id: string; // 部门的唯一 id
|
||||||
|
name: string; // 名字
|
||||||
|
parentId: string; // parentId,如果为根部门,传空字符串。
|
||||||
|
}[];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 获取成员
|
||||||
|
|
||||||
|
1. 同步用户 /user/list
|
||||||
|
|
||||||
|
GET https://example.com/user/list
|
||||||
|
|
||||||
|
返回值类型:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
type UserListResponseListType = {
|
||||||
|
message?: string; // 报错信息
|
||||||
|
success: boolean;
|
||||||
|
userList: {
|
||||||
|
username: string; // 唯一 id username 必须与 SSO 接口返回的用户 username 相同
|
||||||
|
// 必须携带一个前缀,例如: sync-aaaaa,和 sso 接口返回的前缀一致
|
||||||
|
memberName?: string; // 名字,作为 tmbname
|
||||||
|
avatar?: string;
|
||||||
|
contact?: string; // email or phone number
|
||||||
|
orgs?: string[]; // 人员所在组织的 ID。没有组织传 []
|
||||||
|
}[];
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 如何对接非标准系统
|
||||||
|
|
||||||
|
1. 客户自己开发:按 fastgpt 提供的标准接口进行开发,并将部署后的服务地址填入 fastgpt-pro
|
||||||
|
可以参考该模版库:[fastgpt-sso-template](https://github.com/labring/fastgpt-sso-template) 进行开发
|
||||||
|
2. 由 fastgpt 团队定制开发:
|
||||||
|
a. 提供系统的 SSO 文档、获取成员和组织的文档、以及外网测试地址。
|
||||||
|
b. 在 fastgpt-sso-service 中,增加对应的 provider 和环境变量,并编写代码来对接。
|
||||||
|
|||||||
@ -7,10 +7,10 @@ toc: true
|
|||||||
weight: 707
|
weight: 707
|
||||||
---
|
---
|
||||||
|
|
||||||
## 目前 FastGPT 支持的团队模式
|
## 介绍
|
||||||
|
|
||||||
|
目前支持的团队模式:
|
||||||
|
|
||||||
目前支持:
|
|
||||||
1. 多团队模式(默认模式)
|
1. 多团队模式(默认模式)
|
||||||
2. 单团队模式(全局只有一个团队)
|
2. 单团队模式(全局只有一个团队)
|
||||||
3. 成员同步模式(所有成员自外部同步)
|
3. 成员同步模式(所有成员自外部同步)
|
||||||
@ -71,4 +71,11 @@ weight: 707
|
|||||||
|
|
||||||
在完成系统配置,开启同步模式的情况下,外部成员系统的成员会自动同步到 FastGPT 中。
|
在完成系统配置,开启同步模式的情况下,外部成员系统的成员会自动同步到 FastGPT 中。
|
||||||
|
|
||||||
具体的同步方式和规则请参考 [SSO & 外部成员同步](/docs/guide/admin/sso.md)。
|
具体的同步方式和规则请参考 [SSO & 外部成员同步](/docs/guide/admin/sso.md)。
|
||||||
|
|
||||||
|
|
||||||
|
## 配置
|
||||||
|
|
||||||
|
在 `fastgpt-pro` 的`系统配置-成员配置`中,可以配置团队模式。
|
||||||
|
|
||||||
|

|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user