关于BusinessObjects系统单点登录(SSO)解决办法(二)
点击此处查看方法一
b) 方法二
使用嵌入法。这种方法可以直接登录到BusinessObjects中Inforview的主页,这样,所有用户可用的报表就直接由Inforview的主页来展示。
原理:Inforview使用form的认证方式,每一个Form在认证的时候,总是会先检查一个叫做“CE_ENTERPRISESESSION”的Session,如果这个Session里面存在一个BO已经登录了的“EnterpriseSession”,那么,页面可以显示,否则,自动跳转到Inforview的登录页面。
利用这个机制,我们可以为BO创建一个“EnterpriseSession”Session的方法。有人可能会马上想到,我在外部的网站中创建一个这样的Session,然后传递的Inforview中,不就可以了么。想法是对的,但是,难就难在因为网站的隔离性,这样的Session是很难共享的。我已经实验过多次,均告失败。如果您有更好的办法,希望不吝赐教。
既然在别的网站创建的Session不能共享,那么,我们可以使用嵌入法啊。也就是,在Inforview网站的内部创建这个Session。但是由于Inforview是编译运行的网站,所以,我们得需要另外建立别的网页,在我们的网页中进行单点登录,生成Session,最后把这个网页和所生成的DLL文件拷贝到inforview的相应目录下面,使其成为Inforview网站的一部分。当我们需要单点登录到Inforview的主页的时候,我们传递用户信息等参数直接调用我们自己开发的网页,再由我们自己的网页Redirect到Inforview的主页。
注意一点的是,Inforview目前的R2版本是VS2003开发的,所以,我们创建的网页也得需要Vs2003来进行开发。
步骤:
Ø 打开vs2003,新建一个命名为BOSSO网站。
Ø 把默认产生的WebForm1删除掉,添加一个命名为SSOLogon.aspx的网页。
Ø 项目添加对“CrystalDecisions.Enterprise”和“CrystalDecisions.Enterprise.WebControls”引用。
打开SSOLogon.aspx的代码,在Page_Load中增加如下代码:{
string strSystem = Request.QueryString["System"];
string strUser = Request.QueryString["SSOUser"];
string strPWD = Request.QueryString["SSOPWD"];
CrystalDecisions.Enterprise.WebControls.Identity MainIdentity = new CrystalDecisions.Enterprise.WebControls.Identity();
bool Success = MainIdentity.Logon(strUser, strPWD, strSystem, "Enterprise");
if (Success)
{
HttpContext.Current.Session["CE_ENTERPRISESESSION"] = MainIdentity.EnterpriseSession;
Response.Redirect("main.aspx", false);
}
else
{
Response.Redirect("Logon.aspx", false);
}
}
注:在本示例中,我们使用了明文的参数传递方法,这种方法危险性极大,您可以对参数的传递进行加密等处理,但在此为了说明的简单,并不进行复杂的处理。
Ø 编译调式运行程序。
Ø 把调式通过的SSOLogon.aspx网页拷贝到Inforview的目录之下。例如:
C:\Program Files\Business Objects\BusinessObjects Enterprise 11.5\Web Content\Enterprise115\InfoView目录之下。
Ø 把编译生成的BOSSO.DLL文件拷贝到Inforview的bin目录之下。例如:
C:\Program Files\Business Objects\BusinessObjects Enterprise 11.5\Web Content\Enterprise115\InfoView\bin目录之下。
Ø 为了安全起见,您可以把BO网站重新启动一次。
在您需要单点登录到Inforview主页的网站中,使用下面的链接就可以直接登录到Inforview的主页:
…/inforview/SSOLogon.aspx?System=10.10.100.168&SSOUser=Administrator&SSOPWD=MyPassword
使用本方法,弥补了方法一的一些不足:方法一要求必须在外部的网站中对BO的报表进行管理,比如报表的目录,用户对报表所拥有的权限等。使用本方法,我们可以直接利用BO对报表进行分类,权限的控制等等,还可以直接在Inforview的主页中查看其他的报表、文档等信息。