数据分析软件FineBI如何实现OAuth单点登录
- 格式:pdf
- 大小:670.21 KB
- 文档页数:34
详解bi软件FineBI的系统集成过程1. 描述基本上每个公司都会有一套自己的管理系统,虽然FineBI拥有自己的决策平台,如果用户不使用FineBI自主开发的系统,而使用自己的系统,那么就需要将FineBI集成到自己的系统中。
BI集成分为嵌入式集成、用户集成、单点登陆、权限集成。
嵌入式集成是将BI产品或者BI报表嵌入到公司系统中如ERP;用户集成就将公司系统中的用户同步到BI系统中,使两个系统保持一致。
此处参照用户同步数据集;单点登陆即在登陆系统的同时也登陆BI系统(即将输入的用户名密码也发送到BI平台上进行认证),从而访问BI时不需要再次登录,避免不必要的麻烦,保证整个集成完整性,实现无缝集成;权限集成实际上并不算系统集成的一部分,权限的控制依然要走平台的权限,因此直接在BI平台上将权限配置和公司系统一致即可,参照用户权限的内容。
下面简述一下嵌入集成与单点登陆的实现。
2. 嵌入集成在用户的使用中,通常有两种集成:第一种方式是BI分析模嵌入式集成即用户使用BI 工具进行业务模板制作,最后将制作好的模板直接嵌入到自己的系统中,以节省项目开发周期;第二种方式是将整个BI产品框架直接嵌入到公司系统中,作为公司系统的一部分来使用。
可以看出,FineBI的使用分为三大步骤,创建业务包,新建即时分析和查看分析,其中查看分析根据查看的位置不同分为我创建的页面和分享给我的页面。
现在用户开发的系统基本上趋向于BS架构的浏览器/服务器模式,同FineBI的架构相同,用户完全可以通过web 页面嵌入式进行集成操作。
这种集成又分为两种方式,一种是直接使用url;另一种是写成js的iframe框架,在框架中展示。
这两种将在web页面嵌入式集成。
3. 单点登录当集成完后,从公司平台中直接点击不管url或者iframe展示还是API的接口都需要进行登录BI平台的操作,使用单点登录即可方便的避免登录BI的操作,实现系统间的无缝集成。
单点登录方案单点登录(Single Sign-On, SSO)是一种集中式身份验证解决方案,旨在增加用户体验、提高安全性和简化身份验证过程。
在不同的应用程序和系统中,用户只需通过一次登录即可访问多个应用,不需要为每个应用程序都输入用户名和密码。
一个有效的单点登录方案应该具备以下特点:安全性、用户友好性、易于集成和兼容性。
接下来,我将探讨一些常见的单点登录方案,以及它们的优点和缺点。
一、基于SAML的单点登录方案Security Assertion Markup Language (SAML) 是一个基于XML的开放标准,用于在不同的域中安全传输身份验证和授权数据。
基于SAML的单点登录方案具有很高的安全性,用户只需通过一次登录即可在各个关联的应用程序中进行身份验证和授权。
此外,SAML还支持跨不同域的身份提供者之间的身份验证。
然而,SAML方案的集成和配置通常具有较高的复杂性,需要额外的硬件和软件成本。
二、基于OAuth的单点登录方案OAuth是一种开放标准,用于访问互联网用户帐号的代理授权。
基于OAuth的单点登录方案允许用户使用其社交媒体帐号(如Facebook、Google、Twitter等)登录其他应用程序。
这种方式对用户友好,通过使用现有的用户帐号,可以减少用户需要记住的用户名和密码数量。
然而,OAuth方案对于敏感应用程序可能存在安全风险,因为用户的社交媒体帐号可能已经被黑客攻击。
三、基于OpenID Connect的单点登录方案OpenID Connect是基于OAuth 2.0的认证和授权协议。
与OAuth类似,OpenID Connect允许用户使用其现有的互联网身份提供者帐号进行身份验证。
与OAuth不同的是,OpenID Connect提供了一个身份层,允许应用程序获取有关用户身份的更详细的信息。
OpenID Connect方案是一种适用于企业和互联网应用程序的灵活性很高的单点登录方案。
数据分析工具FineBI的如何实现微信企业应用1. 报表微信企业应用示例示例见Demo视频。
2. 创建报表微信企业应用管理员登录微信企业号,根据提示新建应用,创建后进入应用,可以看到应用的基本信息,其中需要关注的信息有:# 应用ID:微信号中可能有很多个应用,后台开发的时候需要根据应用ID来决定是在哪个应用中进行响应# 可见范围:微信权限控制# 应用模式:应用模式主要分成两种:普通模式:这个模式下不能调用微信的接口,只能设置固定的菜单及回复的消息;如果需要的微信应用比较简单,菜单都是固定的,可以用这种模式,但是报表就无法绑定用户了,查看报表的时候就需要先登录(除非报表不做权限控制);回调模式:开发者可以通过企业号提供的接口,获取微信用户信息,实现自动回复、自定义菜单等个性化功能。
回调模式的界面如图所示:3. 回调模式配置我们在应用中需要调用微信开放的接口做开发,所以选择“回调模式”,这样微信服务器会在客户手机和开发者服务器间架起一个桥梁,通过消息的传递和响应,实现与用户的交互操作:上面这个流程走通,需要微信服务器和开发者服务器先建立通信,这样才能构建一个完整的链路。
进入回调模式,开启模式后,可以看到,下面的功能都是不可用状态,需要设置好回调URL及密码后才能用的。
我们点开修改,会看到有3个参数,都是我们需要关注的:# URL:开发服务器接收微信收企业号服务器推送请求的地址,支持http或https协议,端口不限,这个URL就相当于开发服务器的后台引擎,微信服务器推送的请求都是到这个地址。
另外注意,这个地址必须是外网可以访问的。
# Token:可由企业任意填写也可以随机获取,用于生成签名。
# EncodingAESKey:用于消息体的加密,是AES密钥的Base64编码,点击随机获取就可以获得。
点击保存的时候,企业号会向验证url发送一个get请求,例如:1.xxurl?msg_signature=5c45ff5e21c57e6ad56bac8758b79b1d9ac89fd3×tamp=1409659589&nonce=263014780&echostr=P9nAzCzyDtyTWESHep1vC5X9xho%2FqYX3Zpb4yKa9SKld1DsH3Iyt3tP3zNdtp%2B4RPcs8TgAE7OaBO%2BFZXvnaqQ%3D%3D消息中会有四个参数,并且会以AES方式加密:# msg_signature:消息体签名# timestamp:时间戳# nonce:随机数字串# echostr:随机加密字符串开发服务器需要解析出Get请求的参数,对参数进行解密,然后使用之前的Token、EncodingAESKey这两个值进行验证。
单点登录的几种实现代码单点登录(Single Sign-On,简称SSO)是一种身份验证技术,允许用户使用一组凭据登录多个相关但独立的系统。
以下是几种实现单点登录的常见方法的代码示例:1. SAML(Security Assertion Markup Language)实现SSO:```java// Service Provider端public class ServiceProvider {public boolean authenticate(String username, String password) { // 身份验证逻辑}public void ssoRedirect(String idpUrl, String relayState) {// 构建SAML请求// 发送重定向请求到IdP}public void handleResponse(HttpServletRequest request) {// 解析SAML响应// 验证响应的签名// 获取用户信息}}// Identity Provider端public class IdentityProvider {public boolean authenticate(String username, String password) { // 身份验证逻辑}public void handleSSO(HttpServletRequest request) {// 解析SAML请求// 构建SAML响应// 签名响应// 发送响应到SP}}```2. OAuth 2.0 实现 SSO:```java// 授权服务器端public class AuthorizationServer {public String generateAuthorizationCode() {// 生成授权码}public String generateAccessToken() {// 生成访问令牌}public void authorize(HttpServletRequest request, HttpServletResponse response) {// 校验客户端身份String authorizationCode = generateAuthorizationCode();String redirectUri = request.getParameter("redirect_uri"); // 重定向到客户端指定的 redirect_uri,并携带授权码 }public void issueAccessToken(HttpServletRequest request, HttpServletResponse response) {// 校验授权码String accessToken = generateAccessToken();// 返回访问令牌}}// 客户端(资源服务器)端public class ClientServer {public void accessToken(HttpServletRequest request, HttpServletResponse response) {// 发送认证请求到授权服务器// 获取访问令牌}public void processResource(HttpServletRequest request, HttpServletResponse response) {// 处理资源请求}}```3. JWT(JSON Web Tokens)实现 SSO:```java// 认证服务器端public class AuthenticationServer {public String generateToken(String userId) {// 生成 JWT}public void authenticate(HttpServletRequest request, HttpServletResponse response) {// 身份验证逻辑String userId = "123";String token = generateToken(userId);// 返回 JWT}}// 资源服务器端public class ResourceServer {public void processResource(HttpServletRequest request, HttpServletResponse response) {// 处理资源请求String token = request.getHeader("Authorization");// 验证 JWT,提取用户信息}}```请注意,这些示例仅用于说明不同方法的实现,实际的代码实现可能因应用的需求和技术栈而有所不同。
finebi 使用说明
FineBI 是一款强大的商业智能工具,它能够帮助用户轻松地进行数据分析和报
表制作。
以下是对 FineBI 的使用说明:
1. 数据连接和导入:FineBI 支持多种数据源的连接,如数据库、Excel 文件等。
用户可以通过简单的操作将数据导入 FineBI 进行分析。
2. 数据筛选和清洗:FineBI 具备强大的筛选和清洗功能,用户可以根据需要对
数据进行过滤、排序和汇总,以便更好地进行分析。
3. 报表设计和制作:FineBI 提供了丰富的报表设计工具,用户可以根据自己的
需求创建各种类型的报表,如表格、图表、交互式报表等。
同时,FineBI 还支持
报表的样式定制和数据透视等高级功能。
4. 数据分析和透视:FineBI 提供了强大的数据分析和透视功能,用户可以对数
据进行多维度的分析和切割,从而深入挖掘数据背后的价值。
5. 报表发布和共享:FineBI 支持将报表导出为多种文件格式,如 PDF、Excel
和图片等。
用户可以将报表分享给团队成员或客户,并提供权限管理,确保报表的安全性和合规性。
6. 日程和订阅:FineBI 提供了日程和订阅功能,在预定时间自动执行报表生成
和发送。
用户可以根据需要设置订阅周期和收件人,实现定时的数据更新和分享。
总结:FineBI 是一款功能强大且用户友好的商业智能工具,它能够满足用户对
数据分析和报表制作的各种需求。
通过使用 FineBI,用户可以轻松地掌握数据,
深入挖掘数据价值,提高工作效率和决策准确性。
SSO(单点登录)实现⽅案⼀、单点登录概述单点登录的英⽂名称为Single Sign-On,简写为SSO,它是⼀个⽤户认证的过程,允许⽤户⼀次性进⾏认证之后,就访问系统中不同的应⽤;⽽不需要访问每个应⽤时,都重新输⼊密码。
IBM对SSO有⼀个形象的解释“单点登录、全⽹漫游”。
SSO将⼀个企业内部所有域中的⽤户登录和⽤户帐号管理集中到⼀起,SSO的好处显⽽易见:1. 减少⽤户在不同系统中登录耗费的时间,减少⽤户登录出错的可能性2. 实现安全的同时避免了处理和保存多套系统⽤户的认证信息3. 减少了系统管理员增加、删除⽤户和修改⽤户权限的时间4. 增加了安全性:系统管理员有了更好的⽅法管理⽤户,包括可以通过直接禁⽌和删除⽤户来取消该⽤户对所有系统资源的访问权限缺点:1.不利于重构因为涉及到的系统很多,要重构必须要兼容所有的系统,可能很耗时。
2. ⽆⼈看守桌⾯因为只需要登录⼀次,所有的授权的应⽤系统都可以访问,可能导致⼀些很重要的信息泄露⼆、单点登录的实现⽅案1.流程图a、词汇解释1.Service Ticket:进⼊每个客户端的凭证(是唯⼀不重复的)。
2.Ticket Granted Cookie:全局唯⼀凭证(以cookie的形式存储),之所以能从⼀个系统跳转到列⼀个系统不⽤再次登录,全凭它。
b、流程说明①⽤户通过终端访问客户端。
②客户端带着重定向地址(redirect_uri:为各⾃客户端当前页⾯地址[需要编码,防⽌有特殊字符])到验证中⼼登录页验证(没有登录情况下)。
③验证成功⽣成Ticket Granted Cookie和Service Tikcet并存储(为后⾯验证做准备)。
④同时通过url传参的⽅式(redirect_uri?ticket=Service Tikcet)重定向到客户端并为终端游览器设置Ticket Granted Cookie。
⑤客户端获得了Service Ticket,然后到验证中⼼验证。
sso单点登录的几种实现方式
单点登录(SSO)是一种身份验证和授权的机制,允许用户仅需一次登录就可以访问多个应用程序。
以下是几种常见的SSO实现方式:
1. 基于共享 Cookie:在这种方式下,所有应用程序共享一个中心服务器,该服务器负责验证用户身份并颁发加密的Cookie。
用户登录后,Cookie会在不同的应用程序之间进行传递,以实现无需再次输入用户名和密码即可访问应用程序。
2. 基于令牌:这种方式下,用户成功登录后,认证服务器会颁发一个令牌给用户。
该令牌包含用户身份信息和权限验证。
用户在访问其他应用程序时,只需要将令牌发送给认证服务器验证即可。
3. 基于身份提供商(Identity Provider):也称为Federation SSO,这种方式下,企业或组织委托第三方身份提供商来管理用户身份验证。
用户登录时,会被重定向到身份提供商进行验证,验证成功后,身份提供商会向应用程序提供一个供其验证用户身份的令牌。
4. 基于OAuth协议:OAuth是一个开放标准的授权协议,被广泛应用于SSO。
它允许用户使用第三方应用程序(被称为客户端)代表用户请求访问受保护的资源,而无需提供第三方应用程序的用户名和密码。
用户登录成功后,授权服务器会颁发一个访问令牌给客户端,客户端可以使用该令牌来访问受保护的资源。
这些实现方式可以根据具体的需求和系统架构选择使用。
finebi使用教程FineBI是一款强大的商业智能工具,可以帮助用户进行数据分析和可视化,以支持决策制定和业务优化。
下面是FineBI的使用教程,包括一些常用的功能和操作步骤。
1. 数据连接a. 打开FineBI软件,点击主界面的“连接管理”按钮。
b. 在连接管理界面,点击“新建连接”按钮。
c. 根据需求选择适当的数据库类型,并填写数据库相关信息,如主机地址、端口号、用户名、密码等。
d. 点击“测试连接”按钮,确保连接信息正确无误。
e. 点击“保存并关闭”按钮,完成数据连接。
2. 数据集创建a. 在主界面点击“数据集管理”按钮。
b. 在数据集管理界面,点击“新建数据集”按钮。
c. 选择数据源连接,然后选择相应的数据库表或视图。
d. 填写数据集名称,并根据需要选择字段、过滤条件和排序方式等。
e. 点击“保存并关闭”按钮,完成数据集创建。
3. 报表设计a. 在主界面点击“报表设计”按钮。
b. 在报表设计界面,选择数据集并拖拽字段到报表设计器区域。
c. 可根据需要设置字段的显示格式、计算规则和排序方式等。
d. 可添加图表、表格、交叉表等组件,并设置其展示样式和交互操作。
e. 点击“保存并关闭”按钮,完成报表设计。
4. 报表发布a. 在报表设计界面点击“报表发布”按钮。
b. 在报表发布界面填写报表名称、发布路径等信息。
c. 可选择报表的查看权限和操作权限,并设置参数和过滤条件等。
d. 点击“保存并关闭”按钮,完成报表发布。
5. 报表查看a. 在FineBI主界面点击“个人中心”按钮。
b. 在个人中心界面,选择“我的报表”选项卡。
c. 在我的报表界面选择要查看的报表,点击进入。
d. 可根据需要设置报表的参数和过滤条件,查看报表结果。
e. 可导出报表为Excel、PDF等格式,或进行打印、分享和订阅等操作。
以上就是FineBI的使用教程,通过这些步骤,您可以轻松使用FineBI进行数据分析和报表制作。
如何利用免费BI 工具FineBI进行登录查看配置好服务器,管理员对该设备授权之后,就可以在移动设备上查看模版了。
当前教程就使用IOS系统的页面样式,如果使用平板或者安卓的也基本类似。
1. 操作步骤
移动端登录系统之后,进入平台目录选择界面,如下图:
1.1 首页查看
点击当前界面首页模块按钮,可查看平台设置的首页,如下图:
一般首页都是设置为特定模版或者URL链接,当前查看的即为首页模版。
1.2 模版查看
当查看非首页模版时,首先点击需要查看模版所对应的目录,即登录平台页面上点击对应目录按钮。
进入到目录后,可以点击需要模版查看,如图所示:
1.3 组件联动
继续查看上面的模版,我们在使用联动功能。
我们需要先点击可以联动的组件,点击任意数据,如图所示:
1.4 组件钻取
在查看模版的组件时,也会使用到钻取功能。
当激活查看当前组件时,如果该组件可以进行钻取操作,会出现进行钻出操作的按钮,如图所示:
由于是第一层,进行了下钻操作之后,此时也可以使用使用上钻返回上一层维度查看数据展示,如图所示:
1.5 指标维度切换
已经对组件进行了上面的操作,现在可以对组件的展示数据进行一些切换调整操作。
1.6 编辑分享
现在移动端的优势就是即时查看,即时分享。
而我们的APP也是提供了随时编辑添加备注信息,然后分享给自己的同事或者领导等查看。
分享页面如图所示:。
单点登录原理及操作方法
单点登录(Single Sign-On,简称SSO)是一种身份验证的方法,允许用户通过一次登录就可以访问多个关联的应用程序、系统或资源而无需重复输入凭据。
单点登录的原理如下:
1. 用户登录:用户通过输入用户名和密码登录到主SSO系统。
2. 验证身份:主SSO系统验证用户的凭据是否有效。
3. 创建会话:验证通过后,主SSO系统为用户创建一个会话,并生成一个唯一的令牌(Token)。
4. 令牌分发:主SSO系统将令牌发送给用户的浏览器。
5. 应用访问:当用户访问关联的应用程序时,浏览器将令牌作为身份验证凭据发送给应用程序。
6. 验证令牌:应用程序接收到令牌后,将其发送给主SSO系统进行验证。
7. 授权访问:主SSO系统验证令牌后,确认用户的身份,并向应用程序授权用户访问权限。
8. 应用登录:应用程序根据用户的授权信息,允许用户访问相应的资源。
操作方法如下:
1. 在SSO系统中注册用户信息,并将其与关联的应用程序进行绑定。
2. 用户通过SSO系统登录,并获取到令牌。
3. 用户访问关联的应用程序时,将令牌发送给应用程序进行验证和授权。
4. 应用程序根据验证结果和授权信息,决定是否允许用户访问。
5. 用户在SSO系统中登出时,会话和令牌会被销毁,用户需要重新登录。
总结来说,单点登录通过一次登录后获取的令牌进行身份验证和授权,实现了用户在多个应用程序间的无缝访问。
这样能够提高用户体验、简化用户登录过程,并增加应用程序之间的安全性。
数据分析软件FineBI如何实现 OAuth单点登录 OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。oAuth是Open Authorization的简写。 1.2 OAuth单点登录原理 通过过滤器拦截请求,期间通过aouth的认证过程,拿到user,实现帆软的单点登录。 1.3 实现步骤 1.将以下4个jave(HttpUtil.java、myexporter.java、myfilter.java、SSLConnectionClient.java)文件编译为class文件后,放到FineBI对应工程路径下:\WebReport\WEB-INF\classes\com\fr 注:若FineBI对应工程路径下的WEB-INF文件夹中没有classes\com\fr该路径,自行新建该路径。 HttpUtil.java
1. package com.fr; 2. 3. import com.fr.third.org.hsqldb.lib.StringUtil; 4. 5. import javax.net.ssl.*; 6. import java.io.*; 7. import java.net.HttpURLConnection; 8. import java.net.URL; 9. import java.net.URLDecoder; 10. import java.net.URLEncoder; 11. import java.security.SecureRandom; 12. import java.security.cert.X509Certificate; 13. import java.util.HashMap; 14. import java.util.Map; 15. import java.util.Map.Entry; 16. 17. /** 18. * 进行http访问的基本类 19. */ 20. public class HttpUtil { 21. 22. private static final String DEFAULT_CHARSET = "UTF-8"; 23. 24. private static final String METHOD_POST = "POST"; 25. 26. private static final String METHOD_GET = "GET"; 27. 28. private static final int CONNECTTIMEOUT = 5000; 29. 30. private static final int READTIMEOUT = 5000; 31. 32. private static class DefaultTrustManager implements X509TrustManager { 33. 34. public X509Certificate[] getAcceptedIssuers() { 35. return null; 36. } 37. 38. @Override 39. public void checkClientTrusted(X509Certificate[] cert, String oauthType) 40. throws java.security.cert.CertificateException { 41. } 42. 43. @Override 44. public void checkServerTrusted(X509Certificate[] cert, String oauthType) 45. throws java.security.cert.CertificateException { 46. } 47. } 48. 49. private static HttpURLConnection getConnection(URL url, String method, String ctype) 50. throws IOException { 51. HttpURLConnection conn = null; 52. if ("https".equals(url.getProtocol())) { 53. SSLContext ctx = null; 54. try { 55. ctx = SSLContext.getInstance("TLS"); 56. ctx.init(new KeyManager[0], new TrustManager[] { new DefaultTrustManager() }, 57. new SecureRandom()); 58. } catch (Exception e) { 59. throw new IOException(e); 60. } 61. HttpsURLConnection connHttps = (HttpsURLConnection) url.openConnection(); 62. connHttps.setSSLSocketFactory(ctx.getSocketFactory());
63. connHttps.setHostnameVerifier(new HostnameVerifier() { 64. public boolean verify(String hostname, SSLSession session) { 65. return true;// 默认都认证通过 66. } 67. }); 68. conn = connHttps; 69. } else { 70. conn = (HttpURLConnection) url.openConnection(); 71. } 72. conn.setRequestMethod(method); 73. conn.setDoInput(true); 74. conn.setDoOutput(true); 75. conn.setRequestProperty("User-Agent", "quantangle-apiclient-java"); 76. conn.setRequestProperty("Content-Type", ctype); 77. conn.setRequestProperty("Connection", "Keep-Alive"); 78. return conn; 79. } 80. 81. /** 82. * 通过get方法访问,默认编码为utf-8 83. * 84. * @param url 访问的url地址 85. * @param params 请求需要的参数 86. * @return 返回请求响应的数据 87. * @throws IOException 88. */ 89. public static String doGet(String url, Map params) throws IOException { 90. return doGet(url, params, DEFAULT_CHARSET); 91. } 92. 93. /** 94. * 通过get方法访问 95. * 96. * @param url 访问的url地址 97. * @param params 请求需要的参数 98. * @param charset 字符编码 99. * @return 返回请求响应的数据 100. * @throws IOException 101. */ 102. public static String doGet(String url, Map params, String charset) 103. throws IOException { 104. if (StringUtil.isEmpty(url) || params == null) { 105. return null; 106. } 107. String response = ""; 108. url += "?" + buildQuery(params, charset); 109. HttpURLConnection conn = null; 110. String ctype = "application/x-www-form-urlencoded;charset=" + charset; 111. conn = getConnection(new URL(url), METHOD_GET, ctype); 112. response = getResponseAsString(conn); 113. return response; 114. } 115. 116. /** 117. * 118. * @param url api请求的权路径url地址 119. * @param params api请求的业务级参数 120. * @return 121. * @throws IOException 122. */ 123. public static String doPost(String url, Map params) throws IOException { 124. return doPost(url, params, CONNECTTIMEOUT, READTIMEOUT);
125. } 126. 127. /** 128. * 129. * 通过post方法请求数据,默认字符编码为utf-8 130. * 131. * @param url 请求的url地址