SharePoint2010单点登录

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

2.找到  Secure Store Service 应用程序代理

3.然后就是新建了

5.输入网站集管理员

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

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

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

<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>

9.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。

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

/// <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的登录页面登录

SSOSignOn页面代码

<html>
<head id="Head1" runat="server"><title></title><script src="/_layouts/Infinite/js/jquery-1.6.1.min.js" type="text/javascript"></script><script type="text/javascript">//window.onload = function onsubmita() {var ishavesso = "<%=this.IsHaveSSO %>";var xmlhttp;if (ishavesso == "true") {var applicationType = "<%=this.AppType%>";var loginname = $("#UserName").val();var loginpwd = $("#PassWord").val();xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');//登录应用xmlhttp.Open('POST', '<%=this.GotoUrl %> ', false);xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');xmlhttp.Send("<%=this.ParmLoginName %>=" + loginname + "&<%=this.ParmPassword %>=" + loginpwd);document.location = "<%=this.DetailUrl %>";}}</script></head>
<body><form action="<%=this.GotoUrl %>" method="post" autocomplete="off"><div id="logindiv" style="text-align: center; vertical-align: middle; height: 700px;margin-top: 180px; display: none;"><input type="hidden" name="" id="UserName" runat="server" /><input type="hidden" name="" id="PassWord" runat="server" /><br /></div><asp:Label ID="LabMsg" runat="server"></asp:Label><input type="hidden" name="return" id="returnPage" runat="server" value="" /><input name="" id="FormActionValue" runat="server" type="hidden" /></form>
</body>
</html>

  cs文件代码

private string appname = string.Empty;public string AppName//SSOKey{get{if (this.appname == string.Empty && !string.IsNullOrEmpty(this.Request.QueryString["appname"]))this.appname = this.Request.QueryString["appname"];return this.appname;}}private string gotourl = string.Empty;public string GotoUrl//登录请求地址{get{if (this.gotourl == string.Empty && !string.IsNullOrEmpty(this.Request.QueryString["gotourl"]))this.gotourl = HttpUtility.UrlDecode(this.Request.QueryString["gotourl"]);return this.gotourl;}}private string detailurl = string.Empty;public string DetailUrl//登录成功后跳转的地址{get{if (this.detailurl == string.Empty && !string.IsNullOrEmpty(this.Request.QueryString["detailurl"]))this.detailurl = HttpUtility.UrlDecode(this.Request.QueryString["detailurl"]);return this.detailurl;}}private string parmLoginName = string.Empty;public string ParmLoginName//帐号name参数{get{if (this.parmLoginName == string.Empty && !string.IsNullOrEmpty(this.Request.QueryString["pname"]))this.parmLoginName = this.Request.QueryString["pname"];return this.parmLoginName;}}private string parmPassword = string.Empty;public string ParmPassword//密码name参数{get{if (this.parmPassword == string.Empty && !string.IsNullOrEmpty(this.Request.QueryString["ppwd"]))this.parmPassword = this.Request.QueryString["ppwd"];return this.parmPassword;}}private string _isHaveSSO = string.Empty;//sso里面是否存在账户和密码public string IsHaveSSO {get {return this._isHaveSSO;}}/// <summary>  /// 获取单点登陆业务系统中当前用户的信息        /// </summary>         /// <param name="appId">业务系统标识</param>         /// <returns></returns>public static List<string> GetUserCredentialCollection(string appId){List<string> credentialList = new List<string>();SecureStoreProvider prov = new SecureStoreProvider();SPServiceContext context = SPServiceContext.GetContext(SPContext.Current.Site);prov.Context = context; //当前上下文信息,以便从上下文中找到当前登陆用户 try{SecureStoreCredentialCollection cc = prov.GetCredentials(appId);for (int i = 0; i < cc.Count; i++){ISecureStoreCredential c = cc[i];IntPtr ptr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(c.Credential);string sDecrypString = System.Runtime.InteropServices.Marshal.PtrToStringUni(ptr);credentialList.Add(sDecrypString);}}catch{}return credentialList;}protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){List<string> userInfoList =null;try{userInfoList = GetUserCredentialCollection(this.AppName);}catch (Exception){this.LabMsg.Text += "用户凭据未设置,请在管理中心中设置!";}if (userInfoList.Count >= 2){this.UserName.Value = userInfoList[0];this.PassWord.Value = userInfoList[1];_isHaveSSO = "true";}else{_isHaveSSO = "false";}}}

  

转载于:https://www.cnblogs.com/mySaveblogs/p/4021590.html

SharePoint 2010 单点登录相关推荐

  1. 配置Exchange OWA和Sharepoint网站单点登录

    配置Exchange OWA和Sharepoint网站单点登录 如果我们在组织中已经部署完成了Lync.Exchange以及Sharepoint,那么我们会发现这三套系统在通过域账户登录计算机时,如果 ...

  2. 国内首部Sharepoint 2010深入开发(工作流+安全性+单点登录+AD开发、认证等)

    简介:本课程是国内首部深入讲解Sharepoint 2010全程开发的课程,讲师为微软中国上海公司高级工程师.课程采用技术结合实例的方式讲解,涉及内容包括Sharepoint2010之Linq.WCF ...

  3. F5提高Microsoft SharePoint 2010平台的灵捷 度、性能和安全性

    Microsoft® SharePoint® Server 2010为全球各地的企业实现了创新的.智能的业务协作.企业采用Microsoft SharePoint无缝地连接用户.团队和知识.Share ...

  4. SharePoint 2010 中的BCS身份验证模式

    BCS(Business Connectivity Services)是SharePoint 2010中用于替换原先Microsoft Office SharePoint Server 2007企业版 ...

  5. 基于Windows Azure 搭建基于SharePoint 2010 Intranet、Extranet、Internet (1): 安装SharePoint 2010...

    4月底的时候,参加了微软的Windows Azure 体验活动,拿到了Azure的体验账号.经过一番体验后,发现Windows Azure确实是一个学习和实验的好平台.Windows Azure很快就 ...

  6. 在SharePoint 2010使用OWA查看自己邮箱的内容

    在SharePoint 2010使用OWA 背景: 利用 Outlook Web Access Web 部件,可以在 SharePoint 网站中显示从 Microsoft Exchange Serv ...

  7. java php 单点登陆,cas实现单点登录,登出(java跟php客户端)(转)

    cas实现单点登录,登出(java跟php客户端)(转)cas实现单点登录,登出(java和php客户端) (转) 最近项目中需要做单点登录,客户端包含java和php,java有几个应用程序,php ...

  8. 细说SSO单点登录(转)

    OAuth2.0: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-security.html ...

  9. SharePoint 2010设置问卷调查权限

    [SharePoint 2010]设置问卷调查权限 在sharepoint的中,网站默认的权限有:完全控制,设计,参与讨论,读取,受限访问5种.当我们创建问卷调查之后,只有给用户赋予了参与讨论的权限后 ...

最新文章

  1. 求s = k ! + n ! / m !的值
  2. VS环境下的makefile编译
  3. 有用过PHP SPL的吗,不知道这主要用来干嘛
  4. Python 中的 while循环 和 for... in ...循环
  5. macOS Big Sur11.2发布候选版更新:修复蓝牙和显示连接问题
  6. QList和QVector等容器的区别
  7. 使用PHP来简单的创建一个RPC服务
  8. 复制 在div层加滚动条
  9. 三菱梯形图转换成c语言,三菱PLC编程软件的梯形图程序的生成与批改
  10. 拼音模糊查询+java,拼音模糊查询实现
  11. 银联网关支付,退款java实现
  12. Chrome DevTools 中键盘快捷键的参考。
  13. python做事务所审计收费标准_会计师事务所审计收费标准?2019审计报告收费标准...
  14. python识别图片中的人_Python实现识别图片中的所有人脸并显示出来
  15. 走楼梯2<每日一题>
  16. Nginx优化与防盗链
  17. JAVA POI删除word里面的批注comment
  18. echarts青岛市地图下钻到区市及根据各个区市经纬度在各区市地图绘制散点图和道路线
  19. 人人网发布QQ劝架补丁 同时兼容QQ及360
  20. 网络营销推广的主要工作

热门文章

  1. 构建node.js基础镜像_我如何使用Node.js构建工作抓取网络应用
  2. react前端开发_是的,React正在接管前端开发。 问题是为什么。
  3. OpenStack环境搭建(一:Virtual Box 5.1 环境的安装及配置)
  4. 1096 Consecutive Factors
  5. <论文阅读>CascadePSP: Toward Class-Agnostic and Very High-Resolution Segmentation via Global and...
  6. python爬虫天气实例scrapy_python爬虫之利用scrapy框架抓取新浪天气数据
  7. Python培训教程:Python内置数据结构之双向队列
  8. mysql repalication_MySQL主从复制的原理及配置方法(比较详细)
  9. Sublime Text保存文件时自动去掉行末空格
  10. maven学习(4)-Maven 构建Web 项目