利用MOSS的SSO实现单点登陆[代码]-zt

在这部分中,我将向大家介绍怎么来取得存放在SSO数据库中的用户名和密码,并使用它们进行POST提交登陆。

    思路是这样的,在MOSS中创建一个aspx页面,重写这个页面的Page_Load事件,也许你会说,MOSS页面里不能使用服务器端代码,鸡蛋石头飞来~~~呵呵,关于这方面的介绍,请参考我的另一个帖子:向MOSS页面中添加服务器端代码的另外一种方式,http://bbs.winos.cn/thread-48297-1-1.html,在Page_Load事件中,只有几行代码,根据当前登陆域帐户去取第三方系统Form认证的用户名和密码(在我这里是Mantis),并赋值给这个aspx页面的用户名和密码的输入框中,这两个是隐藏的,然后再在windowsonload事件中,执行aspx页面上Form的提交操作。以前看过有人做的OWA访问邮箱的webpart其实也是这种思路,大家都知道,MOSS自带的那个OWA webpart基本没有使用价值。

那我们就一步步来。首先创建一个aspx页面,这个页面完成模拟Post提交的工作,用Designer打开MOSS站点,测试的时候,我直接在站点的根路径下创建的这个页面,需要引用三个命名空间,在aspx页面顶部我们这样来写:

<%@ Page Language="c#" CodePage="936"%>

<%@ Import Namespace="Microsoft.SharePoint" %>

<%@ Import Namespace="Microsoft.SharePoint.Portal" %>

<%@ Import Namespace="Microsoft.SharePoint.Portal.SingleSignon" %>

第一行的CodePage="936"是一个编码格式的问题,我在Postmantis时需要,对你并不一定是必须的。引用之后,我们就可以写Page_Load事件了,这段代码我是参考网上一哥们写的,可以拿去直接使用:

  <script type="text/c#" runat="server">

     protected void Page_Load(object sender, EventArgs e)

    {

       IntPtr pUserName = IntPtr.Zero;

       IntPtr pPassword = IntPtr.Zero;

       ISsoProvider isso = SsoProviderFactory.GetSsoProvider();

       SsoCredentials myCreds = isso.GetCredentials("mantis");//第一部分提到的应用程序名字,我这是mantis

       pUserName = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(myCreds.UserName);

       String userName = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pUserName);

       pPassword = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(myCreds.Password);

       String passWord = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(pPassword);

       this.username.Value = userName;

       this.password.Value = passWord;

    }

  </script>

其中,usernamepassword是我们页面上的两个服务器端控件,下面就是我们构建的模拟提交的Form:

<form action="Post的地址" method="POST" name="登陆页面Form名字 " autocomplete="off">

        <input type="hidden" name="return" value="Post成功后的地址">

        <input name="username" runat="server" id="username" type="hidden">

        <input name="password" runat="server" id="password" type="hidden">

</form>

当然,你可能不知道一个第三方系统Post到哪里去,我们需要借助一个IE插件HttpWatch来分析一下,点击插件的Record,当我们再点登陆的时候,就会看到我们需要的post地址,如图:

1.jpg

第一行就是Post的地址,第二行是在登陆成功后转至的地址,我们需要的就是这两个。

然后我们再查看一下页面的源文件,找到Form的名字及输入用户名和密码的两个文本框,在Mantis里是login_form usernamepassword,就用这三个名字来分别命名我们页面上的控件。

到这里,我们已经完成了根据当前登陆的域帐户取得Mantis里的用户名和密码,并赋值到页面中,现在需要做的只是在windows.onload时,将页面提交出去。

Form的下面,我们这样来写:

<script type="text/javascript">

       window.οnlοad=function (){document.login_form.submit();};

      </script>

这样完成之后,当登陆的域用户打开上面这个页面后,页面会自动找到与该用户对应的Mantis用户名和密码,并自动Post提交登陆,从而跳过Mantislogin界面。

既然是单点登陆,就会有密码同步的问题。细心的朋友肯定会发现,当修改了第三方系统的密码后,上面这个单点登陆肯定就不行了,这是肯定的,因为我们在SSO数据库里存放的匹配密码并没有做相应修改,这部分内容我正在琢磨,怎么实现比较好。初步的设想是用Webservices来修改存放在SSO数据库里的密码,当第三方系统中的密码发生变化后,调用这个Webservices里的方法来修改SSO数据库。

   

   

从 <http://www.mosstec.cn/html/c23/2009-12/4390.htm> 插入

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值