前言
在企业数字化转型的过程中,引入 BI 工具(如 Wyn 商业智能)的核心目标是服务于现有的业务系统。然而,开发者往往面临一个核心痛点:业务系统已有成熟的用户体系和权限架构,如何让用户在无需重复登录的前提下,还能在 BI 系统中沿用原有的组织架构与数据权限?
本文将结合 Wyn 商业智能 的安全提供程序接口,为您拆解如何通过单点登录(SSO)实现系统间的深度集成与权限打通。
一、 为什么 BI 系统需要 SSO 权限对接?
通常情况下,BI 工具与业务系统是两套独立的用户体系。要实现深度集成,需要解决以下三个核心场景:
统一入口:用户使用业务系统账号即可直接进入 Wyn 系统页面。
权限同步:登录后,Wyn 系统需实时获取该用户的组织机构、角色信息,确保“看其该看,析其所有”(即行列级别的数据权限控制)。
无缝嵌入:第三方页面通过后端接口获取登录 Token,以 iframe 或 JS 组件形式无缝嵌入报表。
二、 核心架构:ISecurityProvider 接口体系
Wyn 提供了一套高度模块化的安全提供程序接口,允许开发者通过编写少量代码,将 Wyn 的用户模块重写为指向业务系统的逻辑。
核心接口介绍
ISecurityProvider:核心逻辑类,负责生成/校验 Token、获取用户角色、组织机构及上下文。
ISecurityProviderFactory:工厂类,负责根据外部配置(如 API 地址、数据库连接)初始化安全提供程序。
IExternalUserContext:用户信息访问器,用于获取用户的单值或多值属性(如所属区域、职级等)。
IExternalUserDescriptor:定义用户的基础属性,包括 ID、名称和提供程序类型。
前置配置逻辑
为了提高灵活性,Wyn 支持在前端页面直接修改集成配置(如数据库连接字符串或 API 接口地址)。这通过 ISecurityProviderFactory 的 SupportedSettings 属性实现,开发者可以将配置项以 key:value 的形式赋给该对象,从而避免硬编码。
三、 三大实战场景解析
单点登录体系及用户场景

场景 1:用户身份验证与 Token 生成

当用户尝试登录 Wyn 时,系统会触发 GenerateTokenAsync 方法。
基本思路:验证用户名密码后,生成一个 Token 作为用户信息的索引。
实现方案:
加密存储:将用户信息加密后直接作为 Token,后续解密读取。
容器映射:将用户信息放到内存(redis)Map(dict)容器中,token即为对应键值对的key,后续通过 get(key) 的方式来获取用户信息。
参数编码:将第三方查询该用户信息的关键参数如 userId, userName 等参数编码为token, 后续通过解密为查询参数然后重新查询用户信息来获取。
场景 2:权限与上下文同步

Token 验证通过后,系统会通过该 Token 索引调用 GetUserRolesAsync(获取角色)和 GetUserOrganizationsAsync(获取组织机构)。
上下文处理:使用
IExternalUserContext构建用户信息访问器。通常建议在构建时内置一个 User 对象,通过GetValueAsync和GetValuesAsync动态返回用户属性。
场景 3:第三方调用获取 Token 接口

在某些嵌入式场景下,业务系统后台需要代用户获取 Token。
获取Token接口:

Wyn 提供了标准的 RESTful 接口:
//javascript fetch 代码
var myHeaders = new Headers();
myHeaders.append("Content-type", "application/x-www-form-urlencoded");
var urlencoded = new URLSearchParams();
urlencoded.append("username", "<username>");
urlencoded.append("password", "<password>");
urlencoded.append("grant_type", "<grant_type>");
urlencoded.append("client_id", "<client_id>");
urlencoded.append("client_secret", "<client_secret>");
urlencoded.append("tenant_path", "<tenant_path>");
urlencoded.append("access-token-lifetime", "<access-token-lifetime>");
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: urlencoded,
redirect: 'follow'
};
fetch("http://localhost:51980/connect/token", requestOptions)
.then(response => response.text())
.then(result => console.log(result))
.catch(error => console.log('error', error));注意:tenant_path 参数非常关键,它用于表示用户在 Wyn 中的组织机构角色路径,在生成 Token 时需要额外处理此参数以完成绑定。
四、 开发建议与最佳实践
在实际落地过程中,为了保证代码的可维护性,建议采取以下架构建议:
增加 Service 抽象层:在
ISecurityProvider中不直接写死 SQL 或 API 调用,而是引入一个 Service 功能层。解耦查询逻辑:Service 层下设基础查询层,专门负责数据库连接或 SDK 调用,使业务代码与底层查询完全无关。
处理跨域与 Cookie:
在高版本 Chrome 浏览器中,建议通过 URL 传参(
?token=xxx)而非依赖 Cookie。推荐使用 Nginx 反向代理,将业务系统与 Wyn 配置在同一域名下,从根源解决跨域问题。
五、 总结
Wyn 商业智能通过高度模块化的 ISecurityProvider 接口,不仅实现了 SSO 单点登录,更深度解决了企业级集成中权限同步的难题。这种“原生感”十足的嵌入式分析能力,让 BI 能够真正“长”在业务系统里,助力企业快速构建数据驱动型组织。
Wyn 商业智能软件| 下载试用
Wyn 是西安葡萄城自主研发的嵌入式商业智能软件,能帮助企业用户发现更多的数据潜在价值,为管理者制定决策提供数据支撑。Wyn 具备完整的嵌入式分析能力,能够与其他软件深度集成,也可独立部署使用,快速提升数据展示和分析能力。
Wyn 支持公有云、私有云和本地部署等多种部署方式,并能在Java、.net、PHP等开发平台中使用。您可以将其与ERP、CRM、OA等业务系统,以及钉钉、企业微信等APP进行深度集成,持续交付BI和报表功能,助力您的客户发现数据的价值。
了解更多关于 Wyn 嵌入式商业智能软件的内容,请点击此处访问官网,立即下载体验。
葡萄城热门产品