本文以上海交通大学管理决策系统与统一身份认证和授权系统为研究对象,介绍了Power BI与统一身份认证和授权系统集成的主要步骤,并列出了关键代码。

  本地部署的Power BI采用Windows身份认证方式,要实现与统一身份认证和授权系统的集成,需要改写其认证方式为Forms认证。同时通过控制报表文件夹访问权限,来实现与统一授权系统的集成。本文以上海交通大学管理决策系统与统一身份认证和授权系统为研究对象,介绍了Power BI与统一身份认证和授权系统集成的主要步骤,并列出了关键代码。  

  一、背景介绍与相关工作

  1.背景介绍

  随着高校信息化的不断发展,积累了大量的人事、财务、外事、教务、资产等方面的数据,为各个高校进行大数据分析奠定了基础。一些高校为了更好地发挥大数据的价值,开始建立管理决策支持系统。高校的大数据分析平台,需要建立直观的可视化分析展示平台,确保数据安全和稳定,数据自动更新,对接学校统一身份认证和授权体系,实现学校不同层级管理人员的操作权限、数据权限,并为各个业务领域内的专业人员提供高效易用的分析数据、报表等专业分析工具,达到以支持学校管理决策的作用。因此选择一款适合高校的BI产品变得十分关键。由于Power BI产品比同行业性价比高、发展趋势好,因此上海交通大学管理决策系统选择了微软的Power BI产品构架。基于数据安全和性价比的考虑,选择了Power BI 本地部署的方式。由于本地部署是基于Windows身份认证方式,所以Power BI与学校的统一身份认证和授权的无缝集成工作变得十分重要。本文对Power BI与上海交通大学统一身份认证和授权系统的集成实现进行详细分析。

  2.Power BI

  Power BI 是一套商业数据分析工具,为管理者提供决策支持。可连接数百个数据源、简化数据准备并提供及时分析。生成美观的报表并进行发布,供组织在 Web 和移动设备上使用。每个人都可创建个性化仪表板,获取针对其业务的全方位独特见解。在企业内实现扩展,内置管理和安全性。Power BI都可让你轻松地连接到数据源,直观看到或发现重要内容,与任何所希望的人进行共享。[1]

  3.统一身份认证和授权系统

  (1)统一身份认证

  单点登录(即jaccount)是上海交通大学网络信息中心开发的用户认证体系。通过jaccount认证体系,可以在Web应用中实现单点登录,即用户在一个浏览器会话期里只需登录一次就能进入所有他拥有访问权限的jaccount成员站点。同时,jaccount也可以为校内第三方应用提供统一身份认证和单点登录服务,提供了方便的开发方式和接口。[2]

  (2)统一授权系统

  统一授权系统是在统一身份认证体系的基础上建立起来的统一管理各业务系统权限、角色、岗位的通用平台,各业务系统可以在统一授权系统中定义所需的权限、角色、岗位、属性等内容,管理员可以在统一授权系统中通过统一的入口直接管理各业务系统的角色和岗位。各业务系统可以通过Web 接口或者数据交换平台获取用户在各自业务系统中的角色、岗位和权限。[3]

  二、设计与实现

  1.概述

  用Power BI相关产品开发数据分析系统,主要开发内容包括,建立数据仓库、创建Sql Server Analysis Service模型项目、创建Sql Server Integration Services项目、创建Power BI Report Server、Power BI Desktop进行自助分析并发布到Power BI Report Server、Web应用访问Power BI Report Server发布的报表等,本文提到的Web应用系统主要是指上海交通大学管理决策系统。具体的业务主要是利用ETL工具从数据中心获取到相关业务数据存到数据仓库,建立数据模型,创建大数据可视化的分析图表发布到图表服务器,用户通过Web应用系统访问相应的图表。具体的Power BI 本地部署架构如图1所示。

11.jpg

  本文讨论的解决方案是基于Power BI 采用本地部署的方式。Power BI与学校的统一身份认证和授权系统集成主要有两个难点,一个是用户通过统一身份认证登录后,如何免登录到Power BI Report Server;另一个是用户登录到Power BI Report Server后,如何控制用户访问Power BI Report Server报表权限。

  2.统一身份认证集成

  由于本文讨论的Power BI基于本地部署的方式,所以Power BI Report Server的认证方式是Windows身份认证的方式,需要借助于CustomSecuritySample开源项目[4]来实现自定义认证。需要对CustomSecuritySample项目的代码进行二次开发,同时按照CustomSecuritySample项目的说明进行配置,从而实现用户通过统一身份认证后登录到Web应用系统,然后借助CustomSecuritySample实现Power BI Report Server的Forms认证,从而自动登录到Power BI Report Server。(见图2)

22.jpg

  (1)搭建项目

  本系统开发中用的开发工具是Microsoft Visual Studio 2015、Microsoft SQL Server 2016,以自定义认证项目CustomSecuritySample为基础进行二次开发,用Microsoft Visual Studio 2015打开CustomSecuritySample.sln,添加引用Microsoft.ReportingServices.Interfaces.dll。

  (2)项目关键代码

  修改Logon.aspx里的Page_Load方法,用户登录Web应用后,自动登录到Power BI Report Server,这样用户查看报表的时候就可以直接访问发布在Power BI Report Server里的报表了。主要代码如下所示:

  //Logon.aspx.cs里的代码,统一身份认证登录后自动跳转到自定义认证项目的Logon.aspx页面,在Page_Load方法里进行登录验证

  ReportServerProxy reportServerProxy = new ReportServerProxy();

  reportServerProxy.Url = “/ReportServer/ReportService2010.asmx”;

  try{

  //调用AuthenticationExtension.cs里的LogonUser方法

  reportServerProxy.LogonUser(uname, upwd, null);

  Response.Redirect(returnURL, false);// returnURL是跳转过来的url

  return;

  }

  catch (Exception ex){

  Response.Redirect("/Logon.aspx");// cookie过期或者身份验证错误。

  Response.End();

  }

  // AuthenticationExtension.cs里的LogonUser方法的主要代码

  bool result = AuthenticationUtilities.VerifyPassword(userName, password);

  // AuthenticationUtilities.cs里的VerifyPassword方法代码

  主要是就是验证用户名和密码是否正确。如果正确返回true,用户自动登录到Power BI Report Server,自定义认证项目内部实现了登录到Power BI Report Server。

[page]

  (3)项目配置部署到Power BI Report Server服务器

  一是将Logon.aspx页面复制到Report Server的安装目录下。将CustomSecurity.dll和CustomSecurity.pdb复制到bin文件夹下,同理将这两个文件复制到Portal和PowerBI安装目录下。

  二是修改RSReportServer.config文件。找到元素进行修改,主要是把认证方式改为Forms认证,如下所示:

  

  

  

  三是修改Report Server的Web.config文件。找到元素并将Mode属性更改为Forms,如下所示:

  

  四是配置Passthrough cookies,如下所示:

  sqlAuthCookie

  (4)项目远程调试

  项目部署好后,如果有问题可以用远程调试来定位问题。下面就给出远程调试的主要步骤。主要就是在自定义认证项目CustomSecuritySample里修改好代码,部署到Power BI Report Server后,如果发现修改的内容没有生效或出错,就可以开启远程调试的方式来定位问题。远程调试主要就是把本地的Visual Studio 2015安装目录下的 Remote Debugger文件夹全部拷贝到Power BI Report Server部署所在的服务器上,然后以管理员的权限运行msvsmon文件,在工具菜单里选择允许任何人远程调试即可。在Visual Studio 2015项目里选择附加到进程调试,传输方式选择“远程(无身份验证)”,限定符的IP为远程服务器的IP地址,端口号是msvsmon里允许的端口号,例如211.X.X.58:5022 。点击刷新按钮,附加到相应的进程即可进行远程调试。

  3.统一授权系统集成

  上海交大统一授权系统可以对用户进行岗位授权,例如在统一授权系统中,对用户A授权岗位B,这样用户A就拥有了岗位B在各个应用系统中对应的岗位权限。岗位权限在应用系统中进行设置,岗位可以被授予页面权限,用户登录应用系统后就可以访问应用系统中相应的页面。而我们讨论的Power BI的报表就是嵌套在页面里,如果想访问页面里的报表内容,就必须把Power BI Report Server里的报表访问权限授予岗位,这样用户拥有了报表对应的岗位权限后就可以访问报表了。

33.jpg

  Power BI Report Server报表岗位授权的关键步骤是把报表访问的权限授予岗位,这样用户拥有岗位的权限后就可以访问报表了。用Power BI Desktop制作好报表后,发布到Power BI Report Server指定的文件夹里。发布报表前管理员需要在Power BI Report Server上新建文件夹。在对文件夹的安全性里添加“组或用户”,新增“组或用户”的时候需要和岗位名称保持一致,同时用户访问报表的时候会判断用户的岗位是否在文件夹的“组或用户”里。主要代码是改写CustomSecuritySample项目里的Authorization.cs类的CheckOperations方法。主要代码如下所示:

  //通过用户名获取用户岗位

  DataSet dsRoles = GetUserRoles(principalName);

  if (dsRoles.Tables[0].Rows.Count > 0){

  roles = new string[dsRoles.Tables[0].Rows.Count];

  for (int i = 0; i < dsRoles.Tables[0].Rows.Count; i++){

  roles[i] = dsRoles.Tables[0].Rows[i][0].ToString();

  }

  if (roles != null){

  foreach (string role in roles){

  //校验用户访问文件夹的权限

  if (IsUserAuthorized(role, acl, requiredOperation))

  return true;

  }}

  return false;

  }else{

  return false;

  }

  private bool IsUserAuthorized(string principalName, AceCollection acl, object requiredOperation)

  {

  CollectionBase operations = null;

  if (principalName.Trim() == String.Empty) return false;

  if (0 == String.Compare(principalName, m_adminUserName, true, CultureInfo.CurrentCulture)) return true;

  foreach (AceStruct ace in acl)

  {

  if (0 != String.Compare(principalName, ace.PrincipalName, true, CultureInfo.CurrentCulture)) continue;

  if (requiredOperation is CatalogOperation)

  operations = ace.CatalogOperations;

  else if (requiredOperation is DatasourceOperation)

  operations = ace.DatasourceOperations;

  else if (requiredOperation is FolderOperation)

  operations = ace.FolderOperations;

  else if (requiredOperation is ReportOperation)

  operations = ace.ReportOperations;

  else if (requiredOperation is ResourceOperation)

  operations = ace.ResourceOperations;

  foreach (object aclOperation in operations)

  {

  if (aclOperation.ToString() == requiredOperation.ToString()) return true;

  }

  }

  return false;

  }

  三、结束语

  本文阐述了上海交大管理决策系统采用本地部署的Power BI产品、上海交大统一身份认证和授权系统进行无缝集成的设计和实现,其中的难点就是本地部署Power BI产品采用的是Windows身份认证方式,借助于自定义认证项目改写其认证方式为Forms认证,同时通过控制Power BI Report Server里文件夹访问权限,来实现与统一授权系统集成。授权用户通过统一身份认证登录后,根据其岗位显示相应的菜单,如果有权限就可以在Web应用系统里直接浏览相应菜单下的Power BI Report Server里的报表了,从而实现了对报表的精确权限控制。由于Power BI的功能强大和性价比较高,在Gartner 2018 BI与数据分析魔力象限中可以看出Power BI已经处于行业的领先地位。[5]未来会有越来越多的高校和企业开始使用Power BI。希望本文中的内容,可以给这些高校和企业带来一定的帮助,让他们在和统一身份认证和授权系统对接的时候少走一些弯路。

  参考文献:

  [1]什么是Power BI?[DB/OL].

  [2]白雪松,茅维华.身份与权限体系关键技术的总体设计与实践[J].中山大学学报(自然科学版),2009(s1):260-263.

  [3]白雪松,蒋磊宏,茅维华.全局角色在统一授权体系中的应用[C].中国高等教育学会教育信息化分会第十次学术年会论文集,2010:116-118.

  [4]CustomSecuritySample[DB/OL].

  [5]Discover best-in-class products for BI and analytics[DB/OL].

中国教育信息订阅号二维码
中国教育信息微信服务号