MOSS2010单点登录

分类: SharePoint2010 730人阅读 评论(0) 收藏 举报

 进入管理中心》应用程序管理》

 

然后找到  Secure Store Service 应用程序代理

然后就是新建了

 

输入系统账户

这个时候SharePoint就知道你需要给OA这个系统做单点登录了。

下一步就是我们要把我们进OA系统的帐号密码告诉SharePoint,让他记住当前登录域账户所存的OA账户。

 下面我们模拟一下OA系统登录页面

  1. <html>  
  2.   
  3. <body>  
  4.   
  5. <form id=form1 action='dologin.aspx'>  
  6. <input type='text' name='name'/>  
  7. <input type='password' name='pwd'/><input type='submit' value='login'/>  
  8. </form>  
  9. </body>  
  10. </html>  
<html>

<body>

<form id=form1 action='dologin.aspx'>
<input type='text' name='name'/>
<input type='password' name='pwd'/><input type='submit' value='login'/>
</form>
</body>
</html>

OA的主页是http://OA/index.aspx
这是一个简单的登录页面代码,我们从代码得知,

这个form要提交的页面是 http://OA/dologin.aspx  ,

登录名name

密码pwd

 

那我们登录也需要这几个元素。在我们的moss中创建一个列表SSOList。

应用程序名称,就是一个显示用的,好让你知道是啥系统,SSPkey就是我们前面创建的OA 唯一标识。。。你懂得。

那下一步我们就该写代码了。

先整理下思路,我要先在SSOList这个列表中读出来我们登录的系统。

比如读取列表 然后拼出来,这个你懂得,我就不写了。

我们有OA的登录信息了,也有在管理中心建立OA了,那一步我们是不是改往SSO里面存储登录的帐号密码了?

比如我们OA的账户:zhangsan密码:123456

这个时候我们创建一个webpart。然后创建一个应用程序页面 aspx。

这个页面是专门来存账户和密码的。

  1. /// <summary>   
  2. /// 在SSO中存储当前登录用户的配置的第三方系统单点登录的帐号和密码   
  3. /// </summary>   
  4. /// <param name="ssosetting"></param>   
  5. private void InsertSSO(string ssokey,string loginname,string loginpwd)  
  6. {  
  7.         string userloginname = SPContext.Current.Web.CurrentUser.LoginName;  
  8.         if (!string.IsNullOrEmpty(ssokey) && !string.IsNullOrEmpty(loginname) && !string.IsNullOrEmpty(loginpwd))  
  9.         {  
  10.             string[] userinfo = { loginname, loginpwd};  
  11.             SetUserCredentials(ssokey, userinfo, userloginname);  
  12.         }  
  13. }  
  14.   
  15. /// <summary>      
  16. /// 设置指定用户的登陆凭据      
  17. /// </summary>     
  18. /// <param name="appId">业务系统标识</param>      
  19. /// <param name="userInfo">凭据信息</param>      
  20. /// <param name="userLoginName">MOSS登陆帐号: domainName\LoginName</param>     
  21. public static void SetUserCredentials(string appId, string[] userInfo, string userLoginName)  
  22. {  
  23.     try  
  24.     {  
  25.         SPSecurity.RunWithElevatedPrivileges(delegate()  
  26.         {  
  27.             List<SecureStoreCredential> creds = new List<SecureStoreCredential>();  
  28.             SecureStoreCredential name = new SecureStoreCredential(toSecureString(userInfo[0]), SecureStoreCredentialType.UserName);  
  29.             SecureStoreCredential pwd = new SecureStoreCredential(toSecureString(userInfo[1]), SecureStoreCredentialType.Password);  
  30.             creds.Add(name);  
  31.             creds.Add(pwd);  
  32.             SecureStoreCredentialCollection credes = new SecureStoreCredentialCollection(creds.ToArray());  
  33.             SecureStoreServiceProxy proxySs = new SecureStoreServiceProxy();  
  34.             SPContext.Current.Site.AllowUnsafeUpdates = true;  
  35.             SPContext.Current.Web.AllowUnsafeUpdates = true;  
  36.             SPServiceContext context = SPServiceContext.GetContext(SPContext.Current.Site);  
  37.             ISecureStore store = proxySs.GetSecureStore(context);  
  38.             SPClaim claim = SPClaimProviderManager.Local.ConvertIdentifierToClaim(userLoginName, SPIdentifierTypes.WindowsSamAccountName);  
  39.             store.SetUserCredentials(appId, new SecureStoreServiceClaim(claim), credes);  
  40.         });  
  41.     }  
  42.     catch { }  
  43. }  
        /// <summary>
        /// 在SSO中存储当前登录用户的配置的第三方系统单点登录的帐号和密码
        /// </summary>
        /// <param name="ssosetting"></param>
        private void InsertSSO(string ssokey,string loginname,string loginpwd)
        {
                string userloginname = SPContext.Current.Web.CurrentUser.LoginName;
                if (!string.IsNullOrEmpty(ssokey) && !string.IsNullOrEmpty(loginname) && !string.IsNullOrEmpty(loginpwd))
                {
                    string[] userinfo = { loginname, loginpwd};
                    SetUserCredentials(ssokey, userinfo, userloginname);
                }
        }

        /// <summary>   
        /// 设置指定用户的登陆凭据   
        /// </summary>  
        /// <param name="appId">业务系统标识</param>   
        /// <param name="userInfo">凭据信息</param>   
        /// <param name="userLoginName">MOSS登陆帐号: domainName\LoginName</param>  
        public static void SetUserCredentials(string appId, string[] userInfo, string userLoginName)
        {
            try
            {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    List<SecureStoreCredential> creds = new List<SecureStoreCredential>();
                    SecureStoreCredential name = new SecureStoreCredential(toSecureString(userInfo[0]), SecureStoreCredentialType.UserName);
                    SecureStoreCredential pwd = new SecureStoreCredential(toSecureString(userInfo[1]), SecureStoreCredentialType.Password);
                    creds.Add(name);
                    creds.Add(pwd);
                    SecureStoreCredentialCollection credes = new SecureStoreCredentialCollection(creds.ToArray());
                    SecureStoreServiceProxy proxySs = new SecureStoreServiceProxy();
                    SPContext.Current.Site.AllowUnsafeUpdates = true;
                    SPContext.Current.Web.AllowUnsafeUpdates = true;
                    SPServiceContext context = SPServiceContext.GetContext(SPContext.Current.Site);
                    ISecureStore store = proxySs.GetSecureStore(context);
                    SPClaim claim = SPClaimProviderManager.Local.ConvertIdentifierToClaim(userLoginName, SPIdentifierTypes.WindowsSamAccountName);
                    store.SetUserCredentials(appId, new SecureStoreServiceClaim(claim), credes);
                });
            }
            catch { }
        }








这个方法就会把你当前登录人对应OA的账户密码储存在moss的OA里面

OK,现在账户也存储了,列表也有了。下一步就是登录了。

在新建一个页面SSOSignOn.aspx

我们不是把列表里面的数据读出来了吗?下一步点这个OA连接跳转到SSOSignOn.aspx页面。

需要传几个参数,登录请求页面,账户的name值。密码的name值。登录成功后跳转的页面。虽然我们登录后,OA系统会自动跳转到登录成功页面,

之所以这么做。是因为我们的单点登录不是都要登录OA首页的,比如我们要直接登录到OA的其他功能模块。

这个时候我们就不能登录成功后,还到OA首页了吧。

言归正传,我们SSOSignOn.aspx页面要处理些什么呢?

模拟OA的登录页面登录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值