单点登录特例

编辑
文档创建者:youdunhou (管理员 )     浏览次数:767次     编辑次数:1次     最近更新:doreen0813 于 2017-11-30     

目录:

1、描述编辑

有时候用户的OA系统要与FineBI集成,会通过传递密文的方式执行单点登录。一种情况是OA自带集成功能,通过集成功能传递用户名和密码时,传递取的密码只能取到加密后的密文;另一种情况是,为了安全只传递密文不传递明文。因此在同步数据集的时候,BI系统存的密码也是密文,这样就能直接匹配,不需要加密。但是用户还要使用我们BI的原生的地址登录BI,但是直接登录的时候,密码只能写的是明文,这就匹配不了BI系统存的密文了。像这样矛盾的情况怎么解决呢。我们可以通过以下方案来进行。

注:以通用的MD5加密为例

2、方案编辑

2.1 方案一
最简单的办法通过自定义界面登录BI,在自定义界面读取明文,在js里进行MD5加密返回密文与同步数据集里匹配密文。以后,用户直接登录BI,就用这个界面就可以了。

样例代码如下:

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="http://localhost:37799/WebReport/ReportServer?op=emb&resource=finereport.fs.js"></script> <script type="text/javascript" src="http://localhost:37799/WebReport/ReportServer?op=emb&resource=finereport.js"></script> <script type="text/javascript" src="md5.js"></script> <script type="text/javascript"> function loginFR() { var username =document.getElementById("username").value; var password =document.getElementById("password").value; var pwd=hex_md5(password) var f = document.getElementById("loginForm"); jQuery.ajax({ url:"http://localhost:37799/WebReport/ReportServer?op=fs_load&cmd=sso",//单点登录的报表服务器 dataType:"jsonp",//跨域采用jsonp方式 data:{"fr_username":username,"fr_password":pwd}, jsonp:"callback", timeout:5000,//超时时间(单位:毫秒) success:function(data) { if (data.status === "success") { alert("success"); //登录成功 window.location=data.url;//登录成功,直接跳转到平台系统页面 } else if (data.status === "fail"){ alert("用户名密码错误!!!"); //登录失败(用户名或密码错误) } }, error:function(){ alert("超时或服务器其他错误!!!");// 登录失败(超时或服务器其他错误) } }); } </script> <body> <form id="loginForm" name="loginForm" method="post" action="index.html"> <table> <tbody> <tr class="prop"> <td class="name"><label> Username</label></td> <td class="value"><input id="username" type="text" name="username" value="" /></td> </tr> <tr class="prop"> <td class="name"><label> Password</label></td> <td class="value"><input id="password" type="password" name="password" value="" /></td> </tr> </tbody> </table> </div></div></div> <div class="actionButtons"> <input id="lalala" type="button" name="lalala" onclick="loginFR();" value ="登录"/> <input id="sub" type="submit" name="sub" value="" style="display:none;"/> </div> </form> </body> </html>
我们可以看到在js里通过引用MD5加密方式。在传递密码时,将明文密码先进行一次MD5加密即可。

使用方案:

将md5.js放置到%webapps%WebReport的文件夹下面;将上述样例代码的html文档也放置到该文件夹下面。

222

用户可以使用localhost:37799/WebReport/login.html即可使用明文密码登录。

2.2 方案二

在OA集成里或单点登录的代码中,传递的密码后面加上标识“@123@”作为整体密码,传到SSO单点登录。在用户同步数据集采用“自定义加密”的方式,加密方式判断;如果传过来的密码以@123@结尾,可确定是单点登录过来的,则返回密码去掉@123@,去匹配密文。(password= password.substring(0, passworrd.length()-4);”);如果传过来的密码没有@123@的标识,就使用MD5加密进行处理后,匹配密文。就可以了。

附件列表


主题: 部署集成
标签: 暂无标签 编辑/添加标签
如果您认为本文档还有待完善,请编辑

文档内容仅供参考,如果你需要获取更多帮助,请咨询帆软技术支持
关于技术问题,您还可以通过帆软论坛获取帮助,论坛上有非常多的大神,有些水平比帆软工程师还要高哦。
若您还有其他非技术类问题,可以联系帆软传说哥(微信ID:frbiaoge)

本文档是否有用?
谢谢! 我们非常感谢您的反馈。
提交反馈: