token相关
更新时间: 2025-03-18 19:17:57
阅读 5361
1. 概述
token主要是为了用户在使用集成页面时作登录和权限验证,如果用户想集成本产品的报告和大屏,必须在本产品环境中有一个可使用的账号。
2. 生成token接口
基本信息:
属性 | 值 |
---|---|
API | /api/dash/util/genToken |
Method | POST |
请求参数:
- 用户名密码方式生成 token
字段名称 | 参数类型 | 参数说明 |
---|---|---|
tokenType | String | 'userPassword' |
String | 账户账号,如果邮箱唯一,就是邮箱,否则是uniqueId | |
password | String | 账户密码 |
- tokenKey 方式生成 token
字段名称 | 参数类型 | 参数说明 |
---|---|---|
tokenType | String | 'tokenKey' |
key | String | 使用用户生成的 token key |
- 单点登录方式生成 token
字段名称 | 参数类型 | 参数说明 |
---|---|---|
tokenType | String | 'custom' |
uniqueId | String(Optional) | 账户账号,如果不提供,则使用 integrateToken 获取用户身份 |
integrateToken | String | 单点登录鉴权token,需要定制化开发对接 |
_ 其余可选参数
字段名称 | 参数类型 | 参数说明 |
---|---|---|
authUniqueId | String(Optional) | 最终需要生成的鉴权帐号,如果不传就是用户名密码对应的用户本身,只有超管可以生成其它账号的鉴权token,别人只能生成自己的鉴权token |
relationWithSystemPermission | String(Optional) | 只有 authUniqueId 配置的情况下且 openRp = true 时才生效,表示 resourcePermissions 字段与 authUniqueId 对应在 BI 系统里的资源权限关系,'or' 表示取并集,'and' 表示取交集,'ignore' 表示忽略 BI 系统中的权限,默认为 'or' |
enableWatermark | Bool(Optional) | 是否开启水印信息,只有开启的情况下 watermark 参数才生效 |
watermark | String(Optional) | 水印信息,必须提供uniqueId字段 |
filterMap | Object(Optional) | 数据筛选条件(每个数据连接下对应的各个表字段的数据权限),详见上文中关于数据权限传递参数详细说明行权限部分 |
columnFilterMap | Object(Optional) | 数据筛选列权限(每个数据连接下对应的各个表字段的列权限),详见上文中关于数据权限传递参数详细说明列权限部分 |
tableFilterMap | Object(Optional) | 数据表筛选条件(表示能看到某个数据连接下面的哪些表),主要用于模型集成时使用,具体看用例 |
pillFieldMap | Object(Optional) | 更改指定pill下的某些字段 |
tableExprMap | Object(Optional) | 更改指定自定义sql的表达式 |
parameterMap | Object(Optional) | 动态更改全局参数和报告参数的值 |
expiryTime | Int(Optional) | token的过期时间(单位为s),默认为86400 * 30(一天) |
resourcePermissions | Arr(Optional) | 设置用户可以访问的资源权限,这个权限与用户当前拥有的角色权限取交集 |
openRp | Bool(Optional) | 默认为false,表示是否开启资源权限过滤,只有等于true的情况下,resourcePermissions才起作用 |
clientSetting | Object(Optional) | 原先在url配置的一些显示参数可以放到token,加强安全性 |
useType | String(Optional) | token的使用场景,主要是用于删除token时,需要传'deleteToken',而且只有超管才能删除token |
once | Bool(Optional) | 默认false,表示该token是否只允许某一个人访问,第一个人访问后,其它再访问将失效 |
domainId | Number(Optional) | 域ID,企业域用户可指定 |
autoRenew | Object(Optional) | 是否启动配置token自动续期,每次访问时自动续期当前token,该参数只有在 once =true的时候生效 |
applyScope | String(Optional) | 生成的权限范围, applyScope=Manage 表示包含了管理权限,比如可以做一些删除用户等操作;applyScope=Resource,表示只包含资源相关的预览、导出等权限;applyScope=Project,表示项目粒度的资源权限,只有项目管理员才能指定 Project,此时relationWithSystemPermission必须等于"ignore",并必须指定 authUniqueId或者authUserId,并且必须指定resourcePermissions;applyScope=Domain,表示域主可以生成其他人的token,此时必须指定 authUniqueId 或者 authUserId,且当前账号必须为域主,默认值是 Manage |
projectId | Number(Optional) | 项目ID,只有 applyScope=Project 时才需要指定,而且必须指定,表示是哪个项目的管理权限 |
enableDefaultBookmark | Bool(Optional) | 通过token访问集成报告时是否开启默认书签,true表示开启,false表示不开启,默认false |
parameterAliasMap | Object(Optional) | 用于修改报告中用到的参数值,和 parameterMap 功能类似,不过这个参数是根据参数名称修改的,具体可以看下面用例 |
reportDataFilters | Arr(Optional) | 用于控制某几个报告的数据权限的能力,通过指定报告、报告依赖的模型、报告依赖模型的表及字段等信息进行行权限和列权限的数据权限过滤,这个参数会严格校验每个参数,模型、表。字段、数据连接只要一个出现不匹配将无法使用该token集成报告。 |
uvId | String(Optional) | 用户在集成页面时统计用户的访问uv数据,如果使用管理员生成其他用户的token时,尤其是不在系统中的用户时,客户可以指定这个字段来统计到底最后是访问的这个集成链接,最终可以查看业务表 report_recent_visit.uv_id 获取该访问记录 |
**5.2 对于 filterMap 的参数结构作了相应修改,支持权限的与或规则,兼容旧的数据结构,旧的数据结构默认是and的关系**
{
"email": "zhangsan@163.com",
"password": "123456",
"authUniqueId": "lisi@163.com",
"watermark": {
"email": "zhangsan@163.com",
"uniqueId": "zhangsan@163.com",
"nick": "张三"
},
"enableDefaultBookmark": true, // 开启默认书签
"expireTime": 1000,
"pillFieldMap": {
"123": { //数据模型id
"12": { //该数据模型下某个pill的fieldId
"expr": "12" //需要替换的pill的一些属性
}
}
},
"tableExprMap": {
"123": "select * from dev_online.bigviz_user" //自定义sql的id对应的修改内容,id可以去对应的数据连接下的表信息->自定义sql处获取
},
"autoRenew": {
"expiryTime": 20 //每次访问时自动续期 20 s,这个访问是指有接口访问到后端服务
},
"once": true,
"parameterMap": {
"123": "地区" //key 为参数对应的fieldId, value 为参数的值,fieldId 需要去页面上开发者模式中查看
},
"uvId": "zhangsan", //用于统计zhangsan的访问记录
"parameterAliasMap": { //key表示参数名称
"全局参数-字符串": {
"from": "global", //from有三个取值:all表示既可以是报告粒度的参数也可以是全局参数,优先匹配全局参数,report表示报告中的参数,global表示全局参数
"value": "helloworld" //value就是该参数被替换的值,可以根据参数的类型和场景使用不同的类型的数值。
},
"报告-字符串": {
"from": "report",
"value": "helloworld-报告"
},
"全局参数-字符串-1": {
"from": "all",
"value": "helloworld-报告"
}
},
"clientSetting": {
"integrate": { //integrate字段表示是报告集成页面配置
"ignoreSearch": true, //表示是否忽略url中的search部分,默认为false
"mode": "simple", //集成模式
"toolbar": ["export"], //打印,刷新,导出选项等
"side": true, //是否需要侧边栏
"hidePublic": true, //是否展示公共文件夹
"hidePrivate": true, //是否展示私人文件夹
"hideTitle": true, //是否隐藏标题栏
"hideScaleBar": true, //是否隐藏tab页面区域缩放栏
"tabColor": "red", // tab页面颜色设置
"hidePageBar": true, //整个报告底部工具栏隐藏
"enableReportDetail": true, //报告详情展示
"hideProgressBar": true, //顶部进度条隐藏
"scale": 50, //缩放配置
"bottomBarPos": "top", //底部栏放在顶部配置
"disableGraphicJump": true, //移动端双击禁止跳转
"fit": true, //集成页面自适应宽度时不留白,默认为false
"defaults": { //设置筛选器的默认值
"列表筛选器控件id":{
"selected": [], // Array
"exclude": false //Boolean
},
"日期筛选器控件id":{
"type": "StaticTime",
"minBound": "2016-07-01 00:00:00",
"maxBound": "2016-07-01 00:00:00"
}
},
"customCssId": "xc14bft1", // 指定使用哪个自定义CSS
"permission": { // 此处的权限配置主要用于图表功能的配置(如:图表导出功能、数据预览、排序级别等功能)
"closeMoreMenu": false, // 图表更多按钮关闭
"global": {
"export":["image","excel","pdf"],
"view":true, // 查看数据
"sortPriority":true, // true 排序级别
"inteExplore":true, // true 智能分析
"refreshHist":true, // true 查看刷新历史记录
"setWarning":true, // true 设置度量预警
"viewMaxReport":true, // 查看最大化
"dataDoctor":true, // 数据医生
"copyData":true, // 复制数据
"graphicLink":true // 图表链接
}
}
},
"chatBi": { //chatBi字段表示是ChatBI集成页面配置
"hideApp": false, // 移动端二维码
"hideExport": false, // 导出管理
"hideHelp": false, // 帮助中心以及跳转帮助中心的入口
"hidePopo": false, // 技术支持
"hideUser": false, // 当前用户
"hideFavorite": true, // 收藏、收藏夹
"hideHistory": true, // 历史会话
"hideMyShare": true, // 隐藏我的分享
"hideFilterSet": true, // 隐藏筛选集
"hideChatModeSwitcher": true, // 隐藏对话模式切换按钮
"hideDataModelSelector": false, // 隐藏数据模型选择按钮
"canEditCalculatedField": false, // 是否可以编辑计算字段
"hideAccountLogo": true, // 隐藏账户Logo
"showCloseIcon": false, // 是否展示右上角的关闭按钮
"showInHistory": false, //默认是false,表示集成的问答是否在历史记录展示
"defaultChatMode": "credible", // 默认问答模式 "credible" | "professional",默认"credible"
"chatTopic": "dataModel", // 对话主题,"dataModel"|"indicator" 默认为"dataModel",
"indicatorName": "", // 指标名称
"dataModelId": -1, // 数据模型id
"tagId": -1, // 模型标签id,查询限制特定标签下的数据模型
"ignoreAiUserCorrect": false, // 跳过选择表、字段、成员等步骤
// 以下参数仅在chatbi/dialogIntegration路由下生效
"hideQueryExplanation": false, // 隐藏查询解释
"hideQueryTable": false, // 隐藏查询表
"hideQueryToolbarMore": false, // 隐藏查询工具栏的更多
"hideGraphicChangeType": false, // 隐藏图标切换类型
"hideQueryForcast": false, // 隐藏预测
"hideGraphicToolbar": false, // 隐藏图表工具栏
"hideGraphicMax": true, // 隐藏图表全屏操作,默认隐藏
"hideGraphicRefresh": true, // 隐藏图表刷新操作,默认隐藏
"hideGraphicRefLine": false, // 隐藏图表参考线
"hideAskInfo": false, // 隐藏ask chatItem
"dataModelIds": "1,2,3", // 指定查询的模型,支持多个,英文逗号,分隔
"question": "东北地区的生产总值?", // 问题内容
"dialogId": "123" // 会话的id,如果设置了不会请求新的对话
}
},
"openRp": true, //表示是否开启资源权限过滤(resourcePermissions)
"resourcePermissions": [{
"projectId": 1, //资源所在的项目id
"resourceType": "NEW_REPORT", //资源类型NEW_REPORT(报告),DATA_MODEL(数据模型),DATA_CONNECTION(数据连接),SCREEN(大屏), NEW_SCREEN(发布大屏)
"resourceNamePaths": ["hzzhangdianpeng", "3.10", "未命名报告(1)"], //报告所在的文件夹名字路径,这个参数与resourceId可以2选1(有文件夹概念的资源需要添加文件夹的路径,否则报错)
"isFolder": 0, //是文件夹还是普通资源,默认为0
"permissions": ["view"] //资源对应的权限['view', 'edit', 'export', 'copy']
},{
"projectId": 1,
"resourceType": "NEW_REPORT",
"resourceId": 173, //报告id,这个参数与resourceNamePaths可以2选1,都是为了确定对哪个报告做权限控制
"isFolder": 0,
"permissions": ["view"]
},{
"resourceType": "DATA_MODEL", //可以使用哪些模型
"resourceId": 700288358, //模型ID
"isFolder": 0,
"permissions": ["view"]
},{
"resourceType": "DATA_MODEL",
"resourceId": 700289868,
"isFolder": 0,
"permissions": ["view"]
}],
"filterMap": {
"123": {
"rule": "or", //5.2版本开始支持传递与或规则,用"or"和"and"表示
"dataFilters": [{
"filterType": "listFilter",
"selectType": "select",
"tableName": "订单总表",
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
{
"filterType": "listFilter",
"selectType": "select",
"tableExprId": 3, //自定义sql,数据权限有两种,一种是自定义sql(一定无database),一种是tableName
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
}
]},
"700006204": [
{
"filterType": "listFilter",
"selectType": "select",
"tableName": "订单总表",
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
{
"filterType": "listFilter",
"selectType": "select",
"tableExprId": 3, //自定义sql,数据权限有两种,一种是自定义sql(一定无database),一种是tableName
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
{
"filterType": "treeFilter",
"selectType": "select",
"tableName": "订单总表",
"filter": {
"or": [
{
"dims": [
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": {
"inlist": [
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
},
{
"filterType": "treeFilter",
"selectType": "select",
"tableExprId": 3, //自定义sql,数据权限有两种,一种是自定义sql(一定无database),一种是tableName
"filter": {
"or": [
{
"dims": [
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": {
"inlist": [
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
}
],
"700006205": [
{
"filterType": "listFilter",
"selectType": "unselect",
"database": "bigviz", //数据库名字由数据链接类型决定,如果在建数据模型时需要选择database,这里则需要,否则不需要
"tableName": "订单总表",
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
{
"filterType": "treeFilter",
"selectType": "unselect",
"database": "bigviz", //数据库名字由数据链接类型决定,如果在建数据模型时需要选择database,这里则需要,否则不需要
"tableName": "订单总表",
"filter": {
"or": [
{
"dims": [
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": {
"excludelist": [
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
}
]
},
"columnFilterMap": {
"1234": { //数据连接id
"rule": "or"
"type": "column", //只支持column
"dataFilters": [{
"tableName": "订单",
"type": "dataLevel",
"dataMasks": [{
"field": "地区",
"dataType": "String",
"applyRange": ["view", "export"] //对查看报告和导出的时候设置该列禁止查看
}]
}]
}
}
"reportDataFilters": [
{
"reportId": "14377", //报告ID
"dataModelFilters": [ //报告下面的数据行筛选列表
{
"dataModelId": 700284409, //报告依赖的模型ID
"dataConnectionId": 700315973, //该模型中使用到的数据连接ID
"rule": "or", //权限规则
"type": "row", //权限类型 row:行权限, column: 列权限
"dataFilters": [ // 具体有哪些权限,该配置参考 filterMap 里的配置保持一致
{
"filterType": "listFilter",
"selectType": "select",
"tableName": "订单",
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
{
"filterType": "treeFilter",
"selectType": "select",
"tableName": "订单",
"filter": {
"or": [
{
"dims": [
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": {
"inlist": [
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
}
]
},
{
"dataModelId": 700284409, //报告依赖的模型ID
"dataConnectionId": 700315973, //该模型中使用到的数据连接ID
"rule": "or", //权限规则
"type": "row", //权限类型,
"dataFilters": [{
"tableName": "订单",
"type": "dataLevel",
"dataMasks": [{
"field": "地区",
"dataType": "String",
"applyRange": ["view", "export"] //对查看报告和导出的时候设置该列禁止查看
}]
}]
}
]
}
],
"tableFilterMap": { //表权限过滤,控制到schema的粒度。
"700310203": { //对哪个数据连接进行控制
"rule": "and", //多个筛选之间关系,这个表示的同一个库下面如何控制。
"dataFilters": [{
"database": "dev_netease", //对哪个库下的表进行控制
"produced": "Original", //原始表
"selectType": "select", //选择
"select": ["bigviz_user", "api_name"] //表示只能看到 dev_netease 这个库下面的 bigviz_user 和 api_name 两张表
},{
"produced": "UserDefinedSQL", //自定义SQL
"selectType": "select", //选择
"select": ["1740"] //表示只能看到自定义SQL ID = 1740 这个表。
}]
}
}
}
_ 单点登录方式生成token
字段名称 | 参数类型 | 参数说明 |
---|---|---|
uniqueId | String | 是单点登录用户系统中唯一标志(email/uid等) |
integrateToken | String | 用于验证用户合法性加密字段,有数后端服务会调用用户系统作鉴权 |
watermark | String(Optional) | 水印信息 |
filterMap | Object(Optional) | 数据行权限筛选条件(每个数据连接下对应的各个表字段的数据权限) |
columnFilterMap | Object(Optional) | 数据列权限配置(每个数据连接下对应的各个表字段的列权限) |
expiryTime | Int(Optional) | token的过期时间,默认为86400 * 30(一天) |
pillFieldMap | Object(Optional) | 更改指定pill下的某些字段 |
resourcePermissions | Arr(Optional) | 设置用户可以访问的资源权限,这个权限与用户当前拥有的角色权限取交集 |
clientSetting | Object(Optional) | 原先在url配置的一些显示参数可以放到token,加强安全性 |
{
"uniqueId": "123456",
"integrateToken": "ljasljlkjdsiueiwkjajjsdkjhklajljsk",
"watermark": {
"email": "zhangsan@163.com",
"nick": "张三"
},
"expireTime": 1000,
//这里filterMap生成可以参考用户名密码生成token的方式
"filterMap": {
"700006204": [
{
"filterType": "listFilter",
"selectType": "select",
"tableName": "订单总表",
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
{
"filterType": "treeFilter",
"selectType": "select",
"tableName": "订单总表",
"filter": {
"or": [
{
"dims": [
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": {
"inlist": [
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
}
],
"700006205": [
{
"filterType": "listFilter",
"selectType": "unselect",
"database": "bigviz", //数据库名字由数据链接类型决定,如果在建数据模型时需要选择database,这里则需要,否则不需要
"tableName": "订单总表",
"filter": {
"dim": {
"field": "地区",
"dataType": "String"
},
"select": [
"东北",
"华北"
]
}
},
{
"filterType": "treeFilter",
"selectType": "unselect",
"database": "bigviz", //数据库名字由数据链接类型决定,如果在建数据模型时需要选择database,这里则需要,否则不需要
"tableName": "订单总表",
"filter": {
"or": [
{
"dims": [
{
"field": "地区",
"dataType": "String"
},
{
"field": "省/自治区",
"dataType": "String"
}
],
"cond": {
"excludelist": [
[
"东北",
"黑龙江"
],
[
"华北",
"河北"
]
]
}
}
]
}
}
]
}
}
成功数据返回:
{
"code": 200,
"result": "1503575355359c4fdea8ec1683ed10edd91ae"
}
reportDataFilters失败返回结果:
{
"code": 743, // 如果 reportDataFilters 输入有问题会返回该 code
"message": "reportDataFilters 中对应的模型不存在 dataModelId = 700284408",
}
成功数据返回:
{
"code": 200,
"result": "1503575355359c4fdea8ec1683ed10edd91ae"
}
3. 删除token接口
接口说明:
如果想删除某个token,我们命名为变量t,那么首先需要生成一个专门删除token的token,useType='deleteToken',只有超管才能删除token
基本信息:
属性 | 值 |
---|---|
API | /api/dash/util/rmToken |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 用于删除t的鉴权token |
t | String | 待删除的t |
成功数据返回:
{
code: 200,
result: "ok"
}
4. 续期 token 接口
接口说明:
如果想给某个token 进行续期,我们命名该token变量为t,那么首先需要生成一个专门更新token的token,useType='updateToken',只有超管才能续期token
基本信息:
API | /api/dash/util/renewToken |
Method | GET |
请求参数:
字段名称 | 参数类型 | 参数说明 |
---|---|---|
token | String | 用于续期的鉴权token |
t | String | 待续期的token |
成功数据返回:
{
code: 200,
result: "ok"
}
文档反馈
以上内容对您是否有帮助?