报表公开链接
为已发布的报表生成 access.html 公开链接,配置访问密码与 IP 白名单,说明未配置时的 4703 拒绝、密码 4701/4702 及会话有效期。
概述
公开链接让没有 Sight Report 账号的人通过一个网址查看已发布的报表,不需要登录。链接的形式是:
https://<平台地址>/access.html?reportId=<报表ID>
公开链接只能查看,访问者以「公开访问」的身份获得一个临时会话。报表必须已发布,草稿版本不能公开查看。
公开链接必须配置「访问密码」或「IP 白名单」中的至少一项,两项都为空时,链接打开后提示「该报表未启用公开查看」。
功能入口
报表设计 列表中,每个非目录的报表都有以下入口:
| 入口 | 作用 |
|---|---|
| 「公开查看」 | 在新标签页打开公开链接 |
| 「复制公开链接」 | 把公开链接复制到剪贴板 |
| 「属性」 | 打开属性对话框,展开「访问控制(密码 / IP 白名单,可选)」设置访问密码与 IP 白名单 |
报表尚未发布时,点击「公开查看」或「复制公开链接」会提示「报表尚未发布,公开链接暂不可用」。目录不支持公开查看。
操作步骤
开启公开链接
- 在
报表设计列表中找到目标报表,先确认它已发布。 - 点击该报表的「属性」,在对话框中点击「访问控制(密码 / IP 白名单,可选)」展开设置区。
- 填写「访问密码」(最多 100 个字符)和「IP 白名单」中的一项或两项,点击「确定」。
- 点击「复制公开链接」,把链接发给访问者。
访问者打开链接
- 访问者的客户端 IP 在白名单内:直接进入报表,不询问密码。
- 否则如果报表设置了访问密码:页面显示「输入访问密码」,输入正确的密码后进入报表。
- 密码错误时在输入框下提示「访问密码错误」,可重新输入。
属性/参数说明
| 属性 | 说明 | 取值/默认值 |
|---|---|---|
| 访问密码 | 访问者需要输入的密码,保存为明文比较,前后空格会被去掉 | 可选,最长 100 字符,留空表示不启用密码访问 |
| IP 白名单 | 免密访问的客户端 IP。在名单内的客户端不需要输入密码 | 可选,留空表示不启用 IP 免密访问 |
IP 白名单的写法:
- 界面中每行一个 IP;后端也接受用英文逗号、分号、中文逗号或换行分隔。
- 只做与客户端 IP 的完全相等比较。不支持
192.168.1.0/24这样的网段,也不支持通配符。要放行多个地址需逐个列出。 - 如果平台前面有反向代理,需要保证代理把真实客户端 IP 传给平台,否则识别到的是代理地址。
访问规则
| 访问密码 | IP 白名单 | 访问者 IP | 结果 |
|---|---|---|---|
| 未设置 | 未设置 | 任意 | 拒绝,4703「该报表未启用公开查看」 |
| 未设置 | 已设置 | 在名单内 | 放行 |
| 未设置 | 已设置 | 不在名单内 | 拒绝,4703「当前客户端 IP 不在免密范围内」 |
| 已设置 | 任意 | 在名单内 | 放行,不询问密码 |
| 已设置 | 任意 | 不在名单内 | 需要输入密码:未输入返回 4701,输入错误返回 4702 |
会话有效期为 8 小时,到期后需要重新访问认证。
接口调用
前端页面通过 POST /api/embed/access/auth 换取会话,第三方也可以直接调用。请求体:
| 字段 | 说明 | 取值/默认值 |
|---|---|---|
reportId |
报表 ID | 必填 |
password |
访问密码 | 可选,最长 100 字符 |
BASE=https://your-domain
curl -s -X POST "$BASE/api/embed/access/auth" \
-H 'Content-Type: application/json' \
-d '{"reportId":"rpt_sales","password":"123456"}'
成功响应的 data 中 sessionToken 是会话令牌,appId 固定为 public-access,userName 为「公开访问」,expireAt 是毫秒时间戳。之后调用其他 /api/embed/** 接口时带请求头 X-Embed-Session,见嵌入接口清单。
失败时 code 为下表之一:
| code | 说明 | 处理方式 |
|---|---|---|
| 4701 | 该报表需要访问密码 | 提示访问者输入密码 |
| 4702 | 访问密码错误 | 提示重新输入 |
| 4703 | 未启用公开查看、IP 不在免密范围、报表尚未发布,或请求了草稿版本 | 检查报表的访问控制设置与发布状态 |
与签名嵌入的关系
- 签名嵌入(
embed.html加_s)里,如果报表设置了访问密码,浏览器端需要在换取会话的请求里带password,或由访问者在页面上输入。IP 白名单同样能跳过密码。 - 两者的区别是:签名嵌入不要求报表配置了公开访问,没有设置密码的报表照常放行。
- 第三方服务端直接导出、报表列表查询这些无状态调用不检查访问密码。
注意:访问密码是给页面访问者的二次确认,不是授权边界。会话建立后,后续请求只校验会话,不再检查密码。需要严格授权时使用签名免登。
注意:公开链接打开的报表可以沿单元格报表链接、仪表盘「嵌入报表」区块访问到关联报表,关联报表不会再要求输入密码。分享前确认这些关联报表可以对外公开。