分享页Token参数签名校验

百度数据可视化 SUGAR

  • 数据库新增授权IP的说明
  • 更新日志
  • 联系我们
  • 常见问题
  • 私有部署
    • 私有部署的安装
    • 私有部署的升级
    • 私有部署的费用
    • 私有部署安装常见问题
    • 开启智能问数
    • 开启跨源查询功能
    • 开启自助取数功能
    • 私有部署的试用与购买
    • 自定义访问路径前缀
    • ARM架构镜像
    • License升级
    • 什么是私有部署
    • 开启自定义消息通知
    • 外观主题设置
    • 开启智能预测功能
    • openAPI
      • 概述
      • V2
        • 图表API服务
        • 权限审计
        • 数据模型服务
        • 角色管理
        • 智能问数
        • 可视化页面
          • 大屏
          • 报表
        • 访问统计
          • 组织访问统计
          • 空间访问统计
      • V1
        • 空间用户和权限设置
          • 用户管理
          • 角色管理
        • 组织管理
          • 用户管理
          • 空间管理
        • 可视化页面
          • 过滤组件配置
          • 数据源
          • 数据模型
          • 定时推送
          • 数据筛选
          • 报表
          • 图表配置
    • 数据服务
      • 图表API服务
      • 数据模型服务
  • 产品介绍
    • 概念介绍
    • 产品简介
  • 快速入门
    • 开通服务
    • 制作报表
      • 连接数据源
      • 制作报表
      • 创建数据模型
      • 预览和分享
      • 概述
    • 制作数据填报
      • 制作数据填报
      • 查看数据和数据分析
      • 预览和发布
      • 概述
    • 制作可视化大屏
      • 制作大屏
      • 连接数据源
      • 创建数据模型
      • 预览和分享
      • 概述
    • 制作三维场景
      • 基础操作
      • 嵌入到大屏中
      • 概述
  • 典型实践
    • 问卷数据收集、分析与展现
    • 业务自助BI分析
    • 数据监控与预警
    • 实时滚动地图大屏
    • 固定报表
    • 工业零部件3D大屏
    • 高阶应用
      • 图表联动时地图范围动态变化
      • 下钻中地图范围动态变化
      • 大屏的各种轮播效果汇总
      • 轮播同步图表联动
      • 按数据条件设置颜色
      • 全国和各省份的销售下钻分析
  • 操作指南
    • 历史版本
    • 群机器人
    • 数据门户
    • 数据预警
    • 回收站
    • 宏定义变量
    • 数据血缘
    • 制作可视化页面
      • 组件模板
      • 报表编辑界面
      • 大屏编辑界面
      • 自定义图表主题
      • 图表组件操作
      • 智能图表
      • 页面模板
      • 高级图表
        • 气泡图
        • 矩形树图
        • 河流图
        • 3D饼图
        • 坐标热力图
        • 甘特图
        • 日历热力图
        • 旭日图
        • 自定义组件
        • 3D散点图
        • 桑基图
        • k线图
        • 瀑布图
        • 新拓扑图
        • 3D柱图
        • 拓扑图
      • 地图
        • 地图区域的动态变化
        • 平面地图(色彩、气泡、热力)
        • 自定义GeoJSON
        • 百度地图(散点、热力)
        • 多层地图
        • 平面地图飞线图
        • 3D飞线地图
        • 3D柱状地图
        • 3D区域色彩地图
        • 百度地图路径
      • 交互组件
        • 标签页组件
        • Tab控件
        • 全屏按钮
        • 语音交互组件
        • AI问答组件
      • 媒体
        • 里程碑
        • 图片
        • 视频、直播
        • 音频
        • 文本、跑马灯
        • 字符云
        • 评论
        • 3D词云
        • 富文本
        • 实时时间
        • 图片轮播
        • iframe
        • 天气
      • 基础图表
        • 表格
        • 饼图、环形饼图、轮播饼图
        • 交叉透视表
        • 倒计时
        • 数字翻牌器、百分比指标
        • 山峰柱图
        • 仪表盘
        • 柱状图、横向柱图
        • 指标看板、指标卡片
        • 树形表格
        • 象形柱图
        • 留存报表
        • 直方图
        • 指标拆解树
        • 属性表格
        • 排行榜
        • 水球图
        • 轮播表格
        • 漏斗图
        • 散点图
        • 嵌套饼图
        • 折线图、线柱混搭
        • 核心指标
        • 进度条、环形进度条
        • 雷达图
        • 圆形柱状图
      • 素材
        • 边框
        • 形状
        • 小图标
    • 移动端适配
      • 移动端配置
      • 移动端过滤条件组配置
    • 其它方式绑定数据
      • 静态JSON
      • SQL建模
        • 数据自动补全
        • SQL中嵌入日期宏定义
        • OpenTSDB数据源
        • 数据值映射
        • Mongo数据源
        • ElasticSearch数据源
        • SQL字段展示名称的动态化
        • SQL中关联过滤条件
        • 大屏制作入门
        • 报表制作入门
        • 过滤组件的级联
        • SQL关联联动参数
        • Redis数据源
        • SQL中嵌入用户邮箱
        • InfluxDB数据源
        • 概述和创建数据源
        • SQL模型
        • SQL中行转列
        • SQL中关联下钻参数
        • Graphite数据源
        • SQL中嵌入URL参数
        • 数据缓存
        • Prometheus数据源
        • SQL方式绑定图表数据
          • 气泡图
          • 里程碑
          • 表格
          • 饼图、环形饼图、轮播饼图
          • 数字翻牌器、百分比指标
          • 仪表盘
          • 矩形树图
          • 柱状图、横向柱图
          • 指标看板、指标卡片
          • 字符云
          • 树形表格
          • 河流图
          • 富文本
          • 3D饼图
          • 坐标热力图
          • 平面地图(色彩、气泡、热力)
          • 甘特图
          • 属性表格
          • 排行榜
          • 日历热力图
          • 旭日图
          • 漏斗图
          • 散点图
          • 多层地图
          • 图片轮播
          • 3D散点图
          • 桑基图
          • K线图
          • 平面地图飞线图
          • 瀑布图
          • 3D飞线地图
          • 3D柱状地图
          • 折线图、线柱混搭
          • 核心指标
          • 百度地图(散点、热力)
          • 3D柱图
          • 拓扑图
          • 雷达图
          • 3D区域色彩地图
          • 百度地图路径
          • 圆形柱状图
      • API
        • API认证
        • API后端获取过滤条件参数
        • API的安全机制
        • 各种过滤组件的API格式要求
        • API后端获取当前登录用户
        • API后端获取联动参数
        • API高级配置
        • 各种图表的API格式要求
        • API后端获取下钻参数
        • API后端获取URL额外参数
        • 概述
    • 数据填报
      • 数字类型表单
      • 选择类型表单
      • 日期类型表单
      • 数据填报管理
      • 文本类型表单
      • 数据填报编辑
    • 平台管理
      • 报表和大屏的导入导出
      • 访问统计
      • 智能报表
      • 智能大屏
      • 操作审计
      • 数据探索
      • 空间管理
        • 什么是空间
        • 创建空间
        • 更改空间信息
        • 空间中的用户和管理员
        • 删除空间
        • 空间就是数据门户
      • 组织管理
        • 管理组织中的用户
        • 什么是组织
        • 访问统计
        • 组织的创建和切换
        • 组织的VIP用户
        • 更改组织信息和管理员
        • 操作审计
      • 权限管理
        • 行级别权限管理
        • 用户管理
        • 权限审计
        • 细粒度权限
        • 角色管理
        • 概述
      • 个人中心
        • 个人信息更改
        • 收藏报表和大屏
        • 个人中心是什么
    • 三维场景
      • 场景交互
      • 场景调色
      • 自定义脚本
    • 智能问数
      • 创建及使用智能问数
      • 前期数据准备
      • 智能问数问答模板管理
      • 报表和大屏页面使用智能问数
      • 问数模型配置
      • 智能问数最佳实践
      • 问数权限管理
      • 系统集成
      • 系统集成技术接入指引
      • 使用智能问数
      • 如何优化我的问答效果
      • 概述
    • 智能问数--旧版待下线
      • 创建及使用智能问数
      • 前期数据准备
      • 报表和大屏页面使用智能问数
      • 智能问数最佳实践
      • 概述
    • 智能分析
      • 自动分析
      • 异常分析
      • 波动分析
    • 连接数据源
      • Kerberos 认证
      • API
      • 上传Excel文件
      • 云上VPC内数据源
      • 数据库
      • 内网隧道
      • 静态JSON
      • 云上RDS数据源
      • 概述
    • 分享和订阅
      • 分享页Token参数签名校验
      • 分享页强制用户登录
      • 公开和加密分享
      • 分享页通过URL参数标识用户
      • 多页面轮播
      • 桌面全屏客户端
      • 移动端全屏
      • 空间内多人浏览
      • 定时推送
    • 可视化分析
      • 数据自动补全
      • 图表联动
      • 单个图表的过滤条件
      • 动态的维度和度量分析
      • 数据筛选
      • 数据排序
      • 数据对比
      • 条件格式
      • 关联URL参数
      • 日期时间数据聚合
      • 图表评论
      • 数据缓存
      • 图表下钻
      • 图表标注
      • 过滤组件
        • 时间轴组件
        • 多选组件
        • 时间范围组件
        • 过滤条件宽度占比
        • 时间组件
        • 查询Key值
        • 多重逻辑组件
        • 日期范围组件
        • 输入框组件
        • 时间粒度组件
        • 日期组件
        • 大屏中过滤条件展示为图标
        • 树形选择组件
        • 过滤条件组
        • 过滤组件关联图表
        • 过滤组件的级联、依赖
        • 单选组件
      • 计算字段
        • 数据桶
        • SQL表达式
        • 分组
        • 记录数
        • 表计算
        • 概述
    • 自助取数
      • 创建自助取数
      • 管理自助取数
      • 概述
    • 创建数据模型
      • 数据脱敏
      • 数据格式化和单位
      • 数据值映射
      • 数据类型转换
      • 自定义SQL视图
      • 字段展示名称的动态化
      • 数据模型
      • 跨源交叉分析
    • 智能预测
      • 离线预测
      • 时序预测
      • 模型训练
      • 预测服务
    • 自助探索与AI问答
      • AI问答
      • 自助探索
    • 报表AI能力
      • 报表AI助手
      • 报表AI功能的数据准备
      • 报表AI助手权限管理
      • 报表AI洞察与AI预测
      • 如何优化我的问答效果
      • 概述
    • 微信与钉钉集成
      • 私有部署版
        • 钉钉集成
        • 企业微信集成
        • 飞书集成
        • 如流集成
      • 云上SaaS在线版
        • 企业微信集成
        • 微信集成
  • 视频专区
    • 产品介绍
    • 平台功能
      • 自助取数操作指导
      • 数据预警配置操作指导
      • 数据填报操作指导
      • 数据血缘操作指导
      • 系统管理操作指导
    • 基础功能
      • 图表标注操作指导
      • 连接数据源操作指导
      • 表格组件操作指导
      • 创建数据模型操作指导
      • 三维场景操作指导
      • 报表制作操作指导
      • 数据值映射操作指导
      • 可视化大屏制作操作指导
    • 智能分析
      • 智能图表操作指导
      • 异常分析操作指导
      • 自动分析操作指导
      • AI问答和探索操作指导
      • 波动分析操作指导
    • 操作指南
      • 数据填报
      • AI问答与探索
      • 分享和订阅
      • 连接数据源
      • 智能分析
      • 数据门户
      • 可视化分析
      • 三维场景
      • 制作可视化页面
      • 创建数据模型
      • 平台管理
      • 自助取数
      • 数据预警
      • 数据血缘
    • 交互功能
      • 大屏Tab控件操作指导
      • 报表和图表过滤操作指导
      • 多页面轮播操作指导
      • 数据门户操作指导
      • 标签页组件操作指导
      • 图表下钻操作指导
      • 图表联动操作指导
    • 产品说明
      • 文档使用建议
      • 产品介绍
  • 产品定价
    • 私有部署版定价
    • SaaS在线版定价
    • 免费试用说明
所有文档
menu
没有找到结果,请重新输入

百度数据可视化 SUGAR

  • 数据库新增授权IP的说明
  • 更新日志
  • 联系我们
  • 常见问题
  • 私有部署
    • 私有部署的安装
    • 私有部署的升级
    • 私有部署的费用
    • 私有部署安装常见问题
    • 开启智能问数
    • 开启跨源查询功能
    • 开启自助取数功能
    • 私有部署的试用与购买
    • 自定义访问路径前缀
    • ARM架构镜像
    • License升级
    • 什么是私有部署
    • 开启自定义消息通知
    • 外观主题设置
    • 开启智能预测功能
    • openAPI
      • 概述
      • V2
        • 图表API服务
        • 权限审计
        • 数据模型服务
        • 角色管理
        • 智能问数
        • 可视化页面
          • 大屏
          • 报表
        • 访问统计
          • 组织访问统计
          • 空间访问统计
      • V1
        • 空间用户和权限设置
          • 用户管理
          • 角色管理
        • 组织管理
          • 用户管理
          • 空间管理
        • 可视化页面
          • 过滤组件配置
          • 数据源
          • 数据模型
          • 定时推送
          • 数据筛选
          • 报表
          • 图表配置
    • 数据服务
      • 图表API服务
      • 数据模型服务
  • 产品介绍
    • 概念介绍
    • 产品简介
  • 快速入门
    • 开通服务
    • 制作报表
      • 连接数据源
      • 制作报表
      • 创建数据模型
      • 预览和分享
      • 概述
    • 制作数据填报
      • 制作数据填报
      • 查看数据和数据分析
      • 预览和发布
      • 概述
    • 制作可视化大屏
      • 制作大屏
      • 连接数据源
      • 创建数据模型
      • 预览和分享
      • 概述
    • 制作三维场景
      • 基础操作
      • 嵌入到大屏中
      • 概述
  • 典型实践
    • 问卷数据收集、分析与展现
    • 业务自助BI分析
    • 数据监控与预警
    • 实时滚动地图大屏
    • 固定报表
    • 工业零部件3D大屏
    • 高阶应用
      • 图表联动时地图范围动态变化
      • 下钻中地图范围动态变化
      • 大屏的各种轮播效果汇总
      • 轮播同步图表联动
      • 按数据条件设置颜色
      • 全国和各省份的销售下钻分析
  • 操作指南
    • 历史版本
    • 群机器人
    • 数据门户
    • 数据预警
    • 回收站
    • 宏定义变量
    • 数据血缘
    • 制作可视化页面
      • 组件模板
      • 报表编辑界面
      • 大屏编辑界面
      • 自定义图表主题
      • 图表组件操作
      • 智能图表
      • 页面模板
      • 高级图表
        • 气泡图
        • 矩形树图
        • 河流图
        • 3D饼图
        • 坐标热力图
        • 甘特图
        • 日历热力图
        • 旭日图
        • 自定义组件
        • 3D散点图
        • 桑基图
        • k线图
        • 瀑布图
        • 新拓扑图
        • 3D柱图
        • 拓扑图
      • 地图
        • 地图区域的动态变化
        • 平面地图(色彩、气泡、热力)
        • 自定义GeoJSON
        • 百度地图(散点、热力)
        • 多层地图
        • 平面地图飞线图
        • 3D飞线地图
        • 3D柱状地图
        • 3D区域色彩地图
        • 百度地图路径
      • 交互组件
        • 标签页组件
        • Tab控件
        • 全屏按钮
        • 语音交互组件
        • AI问答组件
      • 媒体
        • 里程碑
        • 图片
        • 视频、直播
        • 音频
        • 文本、跑马灯
        • 字符云
        • 评论
        • 3D词云
        • 富文本
        • 实时时间
        • 图片轮播
        • iframe
        • 天气
      • 基础图表
        • 表格
        • 饼图、环形饼图、轮播饼图
        • 交叉透视表
        • 倒计时
        • 数字翻牌器、百分比指标
        • 山峰柱图
        • 仪表盘
        • 柱状图、横向柱图
        • 指标看板、指标卡片
        • 树形表格
        • 象形柱图
        • 留存报表
        • 直方图
        • 指标拆解树
        • 属性表格
        • 排行榜
        • 水球图
        • 轮播表格
        • 漏斗图
        • 散点图
        • 嵌套饼图
        • 折线图、线柱混搭
        • 核心指标
        • 进度条、环形进度条
        • 雷达图
        • 圆形柱状图
      • 素材
        • 边框
        • 形状
        • 小图标
    • 移动端适配
      • 移动端配置
      • 移动端过滤条件组配置
    • 其它方式绑定数据
      • 静态JSON
      • SQL建模
        • 数据自动补全
        • SQL中嵌入日期宏定义
        • OpenTSDB数据源
        • 数据值映射
        • Mongo数据源
        • ElasticSearch数据源
        • SQL字段展示名称的动态化
        • SQL中关联过滤条件
        • 大屏制作入门
        • 报表制作入门
        • 过滤组件的级联
        • SQL关联联动参数
        • Redis数据源
        • SQL中嵌入用户邮箱
        • InfluxDB数据源
        • 概述和创建数据源
        • SQL模型
        • SQL中行转列
        • SQL中关联下钻参数
        • Graphite数据源
        • SQL中嵌入URL参数
        • 数据缓存
        • Prometheus数据源
        • SQL方式绑定图表数据
          • 气泡图
          • 里程碑
          • 表格
          • 饼图、环形饼图、轮播饼图
          • 数字翻牌器、百分比指标
          • 仪表盘
          • 矩形树图
          • 柱状图、横向柱图
          • 指标看板、指标卡片
          • 字符云
          • 树形表格
          • 河流图
          • 富文本
          • 3D饼图
          • 坐标热力图
          • 平面地图(色彩、气泡、热力)
          • 甘特图
          • 属性表格
          • 排行榜
          • 日历热力图
          • 旭日图
          • 漏斗图
          • 散点图
          • 多层地图
          • 图片轮播
          • 3D散点图
          • 桑基图
          • K线图
          • 平面地图飞线图
          • 瀑布图
          • 3D飞线地图
          • 3D柱状地图
          • 折线图、线柱混搭
          • 核心指标
          • 百度地图(散点、热力)
          • 3D柱图
          • 拓扑图
          • 雷达图
          • 3D区域色彩地图
          • 百度地图路径
          • 圆形柱状图
      • API
        • API认证
        • API后端获取过滤条件参数
        • API的安全机制
        • 各种过滤组件的API格式要求
        • API后端获取当前登录用户
        • API后端获取联动参数
        • API高级配置
        • 各种图表的API格式要求
        • API后端获取下钻参数
        • API后端获取URL额外参数
        • 概述
    • 数据填报
      • 数字类型表单
      • 选择类型表单
      • 日期类型表单
      • 数据填报管理
      • 文本类型表单
      • 数据填报编辑
    • 平台管理
      • 报表和大屏的导入导出
      • 访问统计
      • 智能报表
      • 智能大屏
      • 操作审计
      • 数据探索
      • 空间管理
        • 什么是空间
        • 创建空间
        • 更改空间信息
        • 空间中的用户和管理员
        • 删除空间
        • 空间就是数据门户
      • 组织管理
        • 管理组织中的用户
        • 什么是组织
        • 访问统计
        • 组织的创建和切换
        • 组织的VIP用户
        • 更改组织信息和管理员
        • 操作审计
      • 权限管理
        • 行级别权限管理
        • 用户管理
        • 权限审计
        • 细粒度权限
        • 角色管理
        • 概述
      • 个人中心
        • 个人信息更改
        • 收藏报表和大屏
        • 个人中心是什么
    • 三维场景
      • 场景交互
      • 场景调色
      • 自定义脚本
    • 智能问数
      • 创建及使用智能问数
      • 前期数据准备
      • 智能问数问答模板管理
      • 报表和大屏页面使用智能问数
      • 问数模型配置
      • 智能问数最佳实践
      • 问数权限管理
      • 系统集成
      • 系统集成技术接入指引
      • 使用智能问数
      • 如何优化我的问答效果
      • 概述
    • 智能问数--旧版待下线
      • 创建及使用智能问数
      • 前期数据准备
      • 报表和大屏页面使用智能问数
      • 智能问数最佳实践
      • 概述
    • 智能分析
      • 自动分析
      • 异常分析
      • 波动分析
    • 连接数据源
      • Kerberos 认证
      • API
      • 上传Excel文件
      • 云上VPC内数据源
      • 数据库
      • 内网隧道
      • 静态JSON
      • 云上RDS数据源
      • 概述
    • 分享和订阅
      • 分享页Token参数签名校验
      • 分享页强制用户登录
      • 公开和加密分享
      • 分享页通过URL参数标识用户
      • 多页面轮播
      • 桌面全屏客户端
      • 移动端全屏
      • 空间内多人浏览
      • 定时推送
    • 可视化分析
      • 数据自动补全
      • 图表联动
      • 单个图表的过滤条件
      • 动态的维度和度量分析
      • 数据筛选
      • 数据排序
      • 数据对比
      • 条件格式
      • 关联URL参数
      • 日期时间数据聚合
      • 图表评论
      • 数据缓存
      • 图表下钻
      • 图表标注
      • 过滤组件
        • 时间轴组件
        • 多选组件
        • 时间范围组件
        • 过滤条件宽度占比
        • 时间组件
        • 查询Key值
        • 多重逻辑组件
        • 日期范围组件
        • 输入框组件
        • 时间粒度组件
        • 日期组件
        • 大屏中过滤条件展示为图标
        • 树形选择组件
        • 过滤条件组
        • 过滤组件关联图表
        • 过滤组件的级联、依赖
        • 单选组件
      • 计算字段
        • 数据桶
        • SQL表达式
        • 分组
        • 记录数
        • 表计算
        • 概述
    • 自助取数
      • 创建自助取数
      • 管理自助取数
      • 概述
    • 创建数据模型
      • 数据脱敏
      • 数据格式化和单位
      • 数据值映射
      • 数据类型转换
      • 自定义SQL视图
      • 字段展示名称的动态化
      • 数据模型
      • 跨源交叉分析
    • 智能预测
      • 离线预测
      • 时序预测
      • 模型训练
      • 预测服务
    • 自助探索与AI问答
      • AI问答
      • 自助探索
    • 报表AI能力
      • 报表AI助手
      • 报表AI功能的数据准备
      • 报表AI助手权限管理
      • 报表AI洞察与AI预测
      • 如何优化我的问答效果
      • 概述
    • 微信与钉钉集成
      • 私有部署版
        • 钉钉集成
        • 企业微信集成
        • 飞书集成
        • 如流集成
      • 云上SaaS在线版
        • 企业微信集成
        • 微信集成
  • 视频专区
    • 产品介绍
    • 平台功能
      • 自助取数操作指导
      • 数据预警配置操作指导
      • 数据填报操作指导
      • 数据血缘操作指导
      • 系统管理操作指导
    • 基础功能
      • 图表标注操作指导
      • 连接数据源操作指导
      • 表格组件操作指导
      • 创建数据模型操作指导
      • 三维场景操作指导
      • 报表制作操作指导
      • 数据值映射操作指导
      • 可视化大屏制作操作指导
    • 智能分析
      • 智能图表操作指导
      • 异常分析操作指导
      • 自动分析操作指导
      • AI问答和探索操作指导
      • 波动分析操作指导
    • 操作指南
      • 数据填报
      • AI问答与探索
      • 分享和订阅
      • 连接数据源
      • 智能分析
      • 数据门户
      • 可视化分析
      • 三维场景
      • 制作可视化页面
      • 创建数据模型
      • 平台管理
      • 自助取数
      • 数据预警
      • 数据血缘
    • 交互功能
      • 大屏Tab控件操作指导
      • 报表和图表过滤操作指导
      • 多页面轮播操作指导
      • 数据门户操作指导
      • 标签页组件操作指导
      • 图表下钻操作指导
      • 图表联动操作指导
    • 产品说明
      • 文档使用建议
      • 产品介绍
  • 产品定价
    • 私有部署版定价
    • SaaS在线版定价
    • 免费试用说明
  • 文档中心
  • arrow
  • 百度数据可视化SUGAR
  • arrow
  • 操作指南
  • arrow
  • 分享和订阅
  • arrow
  • 分享页Token参数签名校验
本页目录
  • 前提条件
  • 背景信息
  • 签名参数规则
  • 使用流程
  • 带签名参数的 URL 计算
  • shareID 说明
  • Node.js
  • PHP
  • Java
  • .NET
  • Python
  • 带签名参数的 URL 计算工具

分享页Token参数签名校验

更新时间:2025-08-22

下面介绍在发布大屏和报表时,使用 Token 参数签名校验的方法。通过 Token 参数签名校验功能,您可以对大屏和报表交互时传递的参数进行签名鉴权,来防止访问者通过修改页面传递的参数来访问其他未授权的页面数据,从而提高数据以及用户信息的安全性。

前提条件

在使用 Token 参数签名校验前,请确保:

  • 大屏或报表使用 Token 验证的方式进行公开分享,具体请参见「公开和加密分享」。
  • 大屏在 URL 地址中传递参数(直接在 URL 后面加参数)。
  • 大屏 URL 中传递的参数要求不能被篡改。

背景信息

例如:

某用户的系统嵌入了 Sugar BI 大屏,URL 地址通过 Token 计算出来,并且在 URL 地址中传递area(地区)参数给大屏以展示相对应地区的数据,可以使用 https://sugar.baidubce.com/dashboard/1827981ec07ac66f937a88c9e65f****?_sugar_time=1612959542484&_sugar_signature=H09EX3nMls%2FE6IzhZKr6U6LfNq2Xl%2FJK%2BxYWoPv65D****&area=华东 来访问大屏。

其中 area(地区)是为大屏传递的参数,存在被篡改的可能。比如华东的员工将 URL 改成 https://sugar.baidubce.com/dashboard/1827981ec07ac66f937a88c9e65f****?_sugar_time=1612959542484&_sugar_signature=H09EX3nMls%2FE6IzhZKr6U6LfNq2Xl%2FJK%2BxYWoPv65D****&area=华北 ,就可以看到华北的数据。因此,为了保证数据的安全,需要对用户传递的参数进行签名鉴权,保证计算得到的 URL 参数不能被更改,如果私自更改了传参,页面将无法访问。

签名参数规则

  • 需要加入签名的参数,其参数名需以 sugar_sign_ 开头,后面可以带任何有效的参数名字符
  • 不符合此签名参数规则的参数,将不会进行参数签名校验,允许修改参数值
  • 签名参数按升序排序

使用流程

  1. 确定需要签名计算的参数名(即不允许被篡改的参数)
  2. 在大屏或报表开发完成后,使用 Token 验证的方式发布大屏或报表
  3. 使用带签名参数的 URL 计算生成访问大屏或报表的 URL
  4. 使用上一步中计算得到的 URL 访问大屏或报表,在访问过程中,系统会自动进行参数签名校验
  5. 如果参数签名校验功能正常,当访问者修改了签名参数,再次访问此 URL 时,访问会被拒绝

带签名参数的 URL 计算

shareID 说明

shareID 是大屏/报表在分享时自动生成的 url 中的部分,下面对大屏和报表中分别说明:

大屏分享的 url 地址如:https://sugar.aipage.com/dashboard/41510e632e1e1e4767b0a041030670ec,41510e632e1e1e4767b0a041030670ec 就是 shareID

报表分享的 url 地址如:https://sugar.aipage.com/report/r_1013e-8xdmi3ud-k9wl5p/06e84b7f924ecc9c33857e832de04127,06e84b7f924ecc9c33857e832de04127 就是 shareID

示例代码如下:

Node.js

Javascript
1const crypto = require('crypto');
2const querystring = require('querystring');
3const signedQueryParamReg = /^sugar_sign_.*/; // 符合此正则表达式的参数是需要签名的。
4let token = 'OAMf7CvniOGgoNijH9mFHEHSAf7****';
5let shareID = '1827981ec07ac66f937a88c9e65f****'; // shareID详见前面文档中的说明
6const time = Date.now();
7
8const customParams = {
9  sugar_sign_no: 191866,
10  name: 101
11};
12let signParamsStr = Object.keys(customParams)
13  .filter(paramName => customParams[paramName] && signedQueryParamReg.test(paramName))
14  .sort()
15  .map(param => `${param}=${customParams[param]}`)
16  .join('&');
17let stringToSign = [shareID, time];
18signParamsStr && stringToSign.push(signParamsStr);
19stringToSign = stringToSign.join('|');
20let signature = crypto.createHmac('sha256', token).update(stringToSign).digest().toString('base64');
21let queryParams = {
22  _sugar_time: time,
23  _sugar_signature: signature
24};
25
26Object.keys(customParams).forEach(paramName => {
27  queryParams[paramName] = customParams[paramName];
28});
29
30let url = `https://sugar.baidubce.com/dashboard/${shareID}?${querystring.stringify(queryParams)}`;
31console.log(url);

PHP

Javascript
1<?php
2  $token = "OAMf7CvniOGgoNijH9mFHEHSAf7****";
3  $shareID = "1827981ec07ac66f937a88c9e65f****"; // shareID详见前面文档中的说明
4  $time = time()*1000;
5  $customParams = array(
6    'sugar_sign_no'=>'191866',
7    'name'=>'101'
8  );
9  $sign_array = preg_grep("/^sugar_sign_.*/", array_keys($customParams));
10  sort($sign_array);
11  function toPlain($v)
12  {
13    global $customParams;
14    return "$v=$customParams[$v]";
15  };
16  $signParamsStr = join("&",array_map("toPlain",$sign_array));
17  $stringToSign = $shareID.'|'.$time.'|'.$signParamsStr;
18  $signature = urlencode(base64_encode(hash_hmac('sha256', $stringToSign, $token, true)));
19  $queryParams = join("&",array_map("toPlain",array_keys($customParams)));
20  $url = "https://sugar.baidubce.com/dashboard/".$shareID."?_sugar_time=".$time."&_sugar_signature=".$signature."&".$queryParams;
21  echo $url;
22?>
23<iframe width=100% height=100% src="<?=$url?>"/>

Java

Java
1package com.company;
2import java.security.*;
3import java.util.Date;
4import javax.crypto.*;
5import javax.crypto.spec.SecretKeySpec;
6import org.apache.commons.codec.binary.Base64;
7import java.net.URLEncoder;
8public class TokenTest {
9  public static String getSignedUrl(String shareID, String token, String signParamsStr) {
10    Date date = new Date();
11    Long time = date.getTime();
12    String stringToSign = shareID + "|" + time;
13    if (!StringUtils.isEmpty(signParamsStr)) {
14      stringToSign = stringToSign + "|" + signParamsStr;
15    }
16    String signature = HMACSHA256(stringToSign.getBytes(), token.getBytes());
17    String url = "https://sugar.baidubce.com/dashboard/" + shareID + "?_sugar_time=" + time + "&_sugar_signature=" + signature + "&" + signParamsStr;
18    return url;
19  }
20  /**
21    *  使用java原生的摘要实现SHA256加密。
22    * @param str加密后的报文。
23    * @return
24    */
25  public static String HMACSHA256(byte[] data, byte[] key) {
26    try  {
27      SecretKeySpec signingKey = new SecretKeySpec(key, "HmacSHA256");
28      Mac mac = Mac.getInstance("HmacSHA256");
29      mac.init(signingKey);
30      return URLEncoder.encode(byte2Base64(mac.doFinal(data)));
31    } catch (NoSuchAlgorithmException e) {
32      e.printStackTrace();
33    } catch (InvalidKeyException e) {
34      e.printStackTrace();
35    }
36    return null;
37  }
38  private static String byte2Base64(byte[] bytes){
39    return Base64.encodeBase64String(bytes);
40  }
41  public static void main(String[] args) throws Exception {
42    String signedQueryParamReg = "^sugar_sign_.*";
43    Map<String, Integer> customParams = new HashMap<>();
44    customParams.put("sugar_sign_no", 191866);
45    customParams.put("name", 101);
46    String signParamsStr =  customParams.entrySet().stream().filter(entry -> Pattern.matches(signedQueryParamReg, entry.getKey()))
47    .map(entry -> entry.getKey() + "=" + entry.getValue())
48    .sorted()
49    .collect(Collectors.joining("&"));
50    System.out.println(getSignedUrl("shareID", "token", signParamsStr));  // shareID详见前面文档中的说明
51  }
52}

.NET

C#
1using System;
2using System.Security.Cryptography;
3using System.Text.RegularExpressions;
4using System.Collections.Generic;
5using System.Linq;
6using System.Web;
7using System.Text;
8
9namespace sugarToken
10{
11  class Program
12  {
13    static void Main(string[] args)
14    {
15      var dic = new Dictionary<string, string>();  // 自定义参数。
16      dic.Add("sugar_sign_no", "191866");         // sugar_sign_开头,需要签名。
17      dic.Add("sugar_sign_lo", "mm");
18      dic.Add("sugar_sign_mo", "aa");
19
20      dic.Add("name", "101");   // 不需要签名。
21      // 分享页前缀,大屏分享shareID、token,自定义参数字典。
22      Console.WriteLine(GenerateUrl("https://sugar.baidubce.com/dashboard/", "1827981ec07ac66f937a88c9e65f****", "OAMf7CvniOGgoNijH9mFHEHSAf7****", dic));
23    }
24    private static string GenerateUrl(string sugarBase, string shareID, string token, Dictionary<string, string> customParams)
25    {
26      string pattern = @"^sugar_sign_.*";
27      string timestamp = GetTimeStamp();
28
29      // 参数排序
30      Dictionary<string, string>.KeyCollection keyCol = customParams.Keys;
31      List<string> signKeys = new List<string>();
32
33      foreach (var item in keyCol.ToList())
34      {
35        if (Regex.IsMatch(item, pattern))
36        {
37          signKeys.Add(item);
38        }
39      }
40
41      // 按照key排序
42      signKeys = signKeys.OrderBy(k => k).ToList();
43
44      string paramsSignStr = signKeys.Aggregate("", (total, key) =>
45      {
46        if (total != "")
47        {
48          total += "&";
49        }
50        total += key + "=" + customParams[key];
51        return total;
52      });
53
54      string signStr = shareID + "|" + timestamp + "|" + paramsSignStr;
55
56      var encoding = new System.Text.ASCIIEncoding();
57      byte[] keyByte = encoding.GetBytes(token);
58      byte[] messageBytes = encoding.GetBytes(signStr);
59      string signature;
60      using (var hmacsha256 = new HMACSHA256(keyByte))
61      {
62        byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
63        signature = Convert.ToBase64String(hashmessage);
64      }
65
66      var paramDic = new Dictionary<string, string>();
67      paramDic.Add("_sugar_time", timestamp);
68      paramDic.Add("_sugar_signature", signature);
69
70      foreach (var item in customParams)
71      {
72        paramDic.Add(item.Key, item.Value);
73      }
74      return sugarBase + shareID + "?" + ParseToString(paramDic);
75    }
76    public static string GetTimeStamp()
77    {
78      TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0);
79      return Convert.ToInt64(ts.TotalMilliseconds).ToString();
80    }
81    static public string ParseToString(IDictionary<string, string> parameters)
82    {
83      IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parameters);
84      IEnumerator<KeyValuePair<string, string>> dem = sortedParams.GetEnumerator();
85
86      StringBuilder query = new StringBuilder("");
87      while (dem.MoveNext())
88      {
89        string key = dem.Current.Key;
90        string value = dem.Current.Value;
91        if (!string.IsNullOrEmpty(key) && !string.IsNullOrEmpty(value))
92        {
93          query.Append(key).Append("=").Append(HttpUtility.UrlEncode(value)).Append("&");
94        }
95      }
96      string content = query.ToString().Substring(0, query.Length - 1);
97
98      return content;
99    }
100  }
101}

Python

Python
1import time
2import hmac
3import base64
4import urllib.parse
5
6now = str(round(time.time() * 1000))
7token = b'OAMf7CvniOGgoNijH9mFHEHSAf7****'
8# shareID详见前面文档中的说明
9share_id = '1827981ec07ac66f937a88c9e65f****'
10
11# 自定义参数,其中sugar_sign_开头,需要签名
12custome_params = {
13    "sugar_sign_no": 191866,
14    "name": 101
15}
16# 按照key排序
17sorted_custome_params = {i: custome_params[i] for i in sorted(custome_params.keys())}
18sign_params_str = '&'.join([f"{k}={v}" for k, v in sorted_custome_params.items() if k.startswith("sugar_sign_")])
19string_to_sign = '|'.join([share_id, now, sign_params_str])
20signature = base64.b64encode(hmac.digest(token, string_to_sign.encode('utf-8'), 'sha256')).decode('utf-8')
21signature = urllib.parse.quote(signature)
22# 生成最终链接
23url = f"https://sugar.baidubce.com/dashboard/{share_id}?_sugar_time={now}&_sugar_signature={signature}&" \
24      + urllib.parse.urlencode(sorted_custome_params)
25
26print(url)

使用以上代码示例得到的 URL 为:https://sugar.baidubce.com/dashboard/1827981ec07ac66f937a88c9e65f****?_sugar_time=1612500688339&_sugar_signature=xM%2FNQv%2F5Je7o4j2046I0Gi%2BDmQegGn%2FEHXU%2BNskcEg****&sugar_sign_no=191866&name=101,在 URL 的有效期内,如果修改了 sugar_sign_no 字段的值,链接将无法访问,如果修改了 name 字段的值,链接仍然可以访问,因为 sugar_sign_no 符合签名参数规则,参与了签名计算,而 name 不符合签名参数规则,不会进行签名计算。

带签名参数的 URL 计算工具

Sugar BI 提供了单独的签名 URL 计算工具,您可以访问「签名 URL 计算工具」来生成带签名参数的 URL 示例。

上一篇
连接数据源
下一篇
分享页强制用户登录