SharePoint 2010中的单点登录

  在SharePoint 2007时代我们可以通过Microsoft Single Sign-on Service来实现单点登录,但到了SharePoint 2010中不再有Single Sign-on这个服务了,取而代之的则是Secure Store Service简称SSS。与以前的SSO一样,SSS也提供了一个数据库实例来保存用于访问某些外部应用程序或外部数据源的用户凭据信息,所不同的是我们不仅可以使用SSS中保存的凭据信息来实现单点登录,同时BDC、Excel Service等服务应用程序现在也可使用SSS中保存的凭据来访问外部数据源。接下来的内容中小弟我将对如何使用SSS实现单点登录进行详细的说明。

  与2007相同的是在SP 2010中要实现单点登录依然需要我们写代码来实现,不过在这之前还需要对场中的SSS服务进行初始配置。

  对SSS进行初始配置

  首先进入SharePoint 2010管理中心,在应用程序管理页面选择管理服务应用程序。

  在服务应用程序页面,选择Secure Store Service,然后点击上方Ribbon区中的管理。

  在初次进入SSS管理页面时,系统将提示我们“在创建新的安全存储目标应用程序之前,必须首先在功能区中为此 Secure Store Service 应用程序生成新密钥。”

  该密钥将对我们存储在SSS数据库中的凭据信息进行加密和解密。

  点击Ribbon区内的生成新密钥,在弹出窗口中为该密钥设置通行短语。

  密钥生成后,SSS的初始配置便算是告一段落了。

  创建目标应用程序

  如果大家在SharePoint 2007中曾经使用过SSO的话应该对这部分的内容比较熟悉,关于创建目标应用程序的操作与2007相比并无很大区别。

  首先还是进入我们的SSS实例的管理页面,在Ribbon区里的管理目标应用程序组中单击新建按钮进入创建新的安全存储目标应用程序页面。

  我们需要设置目标应用程序的ID、显示名称、联系人电子邮件、目标应用程序类型这四个主要属性,其中比较重要的属性是目标应用程序ID和目标应用程序类型。ID是SSS用于识别此目标应用程序的唯一标识,目标应用程序类型主要分为个人和组两大类,如果选择个人则可以启用一个目标应用程序页,该页面将用于用户自行添加该目标应用程序的个人凭据。

  因为在本例中要做的是用户与其个人邮箱间的映射,所以这里选择个人就好了,然后点击下一步。下面要做的就是设置将凭据提交到外部数据源时所要用到的字段了,默认情况下是用户名和密码两个字段。其中的已屏蔽选项表示当用户在输入该字段的值时将以屏蔽字符代替用户的输入字符,例如 *号。在本例中保持默认值就可以了。

  最后还需要为此目标应用程序设置一个管理员。

  OK,到了这里所有的配置工作就结束了,由于在SharePoint 2010中微软仍然没有提供一个可以out-of-box的WebPart,所以像07中一样,要实现单点登录的话还需要我们自己来开发一个WebPart。

  创建单点登录WebPart

  由于在SharePoint 2010中微软用SSS取代了以前的SSO,所以在2007中实现单点登录时所用的代码现在已经不能用了,需要用SP 2010中新的对象模型来完成这一功能。

  使用VS2010创建一个空白SharePoint项目,然后添加一个可视Web部件。

  接着在此项目中添加Microsoft.BussinessData和Microsoft.Office.SecureStoreService的引用。这里呢可能会出现一个问题,因为在\Microsoft Shared\Web Server Extensions\14\ISAPI这个目录下只有Microsoft.Office.SecureStoreService.Server.Security这个dll,需要我们自己到GAC中将Microsoft.Office.SecureStoreService这个dll拷贝出来才行,可以参看http://support.microsoft.com/kb/982263。Microsoft.BussinessData可以在\Microsoft Shared\Web Server Extensions\14\ISAPI目录下找到。

  通过下面这段代码可获得当前用户存储在SSS中的目标应用程序凭据。

protected void Button1_Click(object sender, EventArgs e)

{

string m_userName = string.Empty;

string m_password = string.Empty;

string m_html = string.Empty;

string m_appId = "163Mail";

SecureStoreProvider m_provider = new SecureStoreProvider();

SPSite m_site = SPContext.Current.Site;

SPServiceContext m_serviceContext = SPServiceContext.GetContext(m_site);

m_provider.Context = m_serviceContext;

try

{

SecureStoreCredentialCollection m_sscc = m_provider.GetCredentials(m_appId);

foreach (SecureStoreCredential ssc in m_sscc)

{

switch (ssc.CredentialType)

{

case SecureStoreCredentialType.Generic:

break;

case SecureStoreCredentialType.Key:

break;

case SecureStoreCredentialType.Password:

m_password = ToClrString(ssc.Credential);

break;

case SecureStoreCredentialType.Pin:

break;

case SecureStoreCredentialType.UserName:

m_userName = ToClrString(ssc.Credential);

break;

case SecureStoreCredentialType.WindowsPassword:

break;

case SecureStoreCredentialType.WindowsUserName:

break;

default:

break;

}

}

m_html += "<script>";

m_html += string.Format("window.location.href='http://reg.163.com/login.jsp?url=&type=1&product=&savelogin=&outfoxer=&domains=&syscheckcode=4ecd8fe3803494cff0df5414f321fd5f9afa4c78&username={0}%40163.com&password={1}&Submit='", m_userName, m_password);

m_html += "</script>";

Response.Write(m_html);

}

catch (Exception ex)

{

Response.Write("<script>window.location.href= '/_layouts/SecureStoreSetCredentials.aspx?TargetAppId=" + m_appId + "';</script>");

}

}

  完成后将WebPart部署到网站中,OK,结束~~~

  面是本示例的完整代码,比较简单也没写注释,大伙凑乎着看吧。

using System;

using System.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using Microsoft.SharePoint;

using Microsoft.Office.SecureStoreService.Server;

using Microsoft.BusinessData.Infrastructure.SecureStore;

namespace SP2010SingleSignOnWebPart.SingleSignOnWebPart

{

public partial class SingleSignOnWebPartUserControl : UserControl

{

protected void Button1_Click(object sender, EventArgs e)

{

string m_userName = string.Empty;

string m_password = string.Empty;

string m_html = string.Empty;

string m_appId = "163Mail";

SecureStoreProvider m_provider = new SecureStoreProvider();

SPSite m_site = SPContext.Current.Site;

SPServiceContext m_serviceContext = SPServiceContext.GetContext(m_site);

m_provider.Context = m_serviceContext;

try

{

SecureStoreCredentialCollection m_sscc = m_provider.GetCredentials(m_appId);

foreach (SecureStoreCredential ssc in m_sscc)

{

switch (ssc.CredentialType)

{

case SecureStoreCredentialType.Generic:

break;

case SecureStoreCredentialType.Key:

break;

case SecureStoreCredentialType.Password:

m_password = ToClrString(ssc.Credential);

break;

case SecureStoreCredentialType.Pin:

break;

case SecureStoreCredentialType.UserName:

m_userName = ToClrString(ssc.Credential);

break;

case SecureStoreCredentialType.WindowsPassword:

break;

case SecureStoreCredentialType.WindowsUserName:

break;

default:

break;

}

}

m_html += "<script>";

m_html += string.Format("window.location.href='http://reg.163.com/login.jsp?url=&type=1&product=&savelogin=&outfoxer=&domains=&syscheckcode=4ecd8fe3803494cff0df5414f321fd5f9afa4c78&username={0}%40163.com&password={1}&Submit='", m_userName, m_password);

m_html += "</script>";

Response.Write(m_html);

}

catch (Exception ex)

{

Response.Write("<script>window.location.href= '/_layouts/SecureStoreSetCredentials.aspx?TargetAppId=" + m_appId + "';</script>");

}

}

internal string ToClrString(SecureString p_string)

{

var m_ptr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(p_string);

try

{

return System.Runtime.InteropServices.Marshal.PtrToStringBSTR(m_ptr);

}

finally

{

System.Runtime.InteropServices.Marshal.FreeBSTR(m_ptr);

}

}

}

}

时间: 2024-10-23 11:09:51

SharePoint 2010中的单点登录的相关文章

“.NET研究”SharePoint 2010中的单点登录

在SharePoint 2007时代我们可以通过Microsoft Single Sign-on Service来实现单点登录,但到了SharePoint 2010中不再有Single Sign-on这个服务了,取而代之的则是Secure Store Service简称SSS.与以前的SSO一样,SSS也提供了一个数据库实例来保存用于访问某些外部应用程序或外部数据源的用户凭据信息,所不同的是我们不仅可以使用SSS中保存的凭据信息来实现单点登录,同时BDC.Excel Service等服务应用程序

一起谈.NET技术,SharePoint 2010中的单点登录

在SharePoint 2007时代我们可以通过Microsoft Single Sign-on Service来实现单点登录,但到了SharePoint 2010中不再有Single Sign-on这个服务了,取而代之的则是Secure Store Service简称SSS.与以前的SSO一样,SSS也提供了一个数据库实例来保存用于访问某些外部应用程序或外部数据源的用户凭据信息,所不同的是我们不仅可以使用SSS中保存的凭据信息来实现单点登录,同时BDC.Excel Service等服务应用程序

VSTO学习笔记(四)从SharePoint 2010中下载文件

原文:VSTO学习笔记(四)从SharePoint 2010中下载文件 上一次我们开发了一个简单的64位COM加载项,虽然功能很简单,但是包括了开发一个64位COM加载项的大部分过程.本次我们来给COM加载项添加一些功能:从SharePoint 2010的文档库中下载一个Excel文档到本地. 示例代码下载 本系列所有示例代码均在 Visual Studio 2010 Ultimate RC + Office 2010 Professional Plus Beta x64 上测试通过.   1.

在ASP.NET 中实现单点登录

asp.net 在ASP.NET 中实现单点登录 由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录.在ASP.NET中实现单点登录其实很简单,下面就把主要的方法和全部代码进行分析. 实现思路 利用Cache的功能,我们把用户的登录信息保存在Cache中,并设置过期时间为Session失效的时间,因此,一旦Session失效,我们的Cache也过期:而Cache对所有的用户都可以访问,因此,用它保存用户信息比数据库来得方便. 查看示例 SingleL

SharePoint 2010中的客户端AJAX应用——对话框显示详细信息页

ASP.Net AJAX模板是一门全新的引人注目的客户端技术,允许开发者快速构建AJAX易于维护的交互式应用程序.由于ASP.Net AJAX模板和SharePoint 2010都支持oData协议,因此两者结合在一起将是一个强大的组合. SharePoint 2010 之所以可以带给人们Web 2.0的外观和感觉很大一部分要归功于其弹出式模式对话框的使用.为了进一步丰富上一篇中的AJAX应用,我们在每张卡片上挂接一个操作,打开一个对话框以便对该卡片做更细致的处理.在之前的使用SharePoin

SharePoint 2010中的客户端AJAX应用——保存数据至SharePoint

本文是SharePoint 2010客户端AJAX应用系列的一部分.ASP.Net AJAX模板是一门全新的引人注目的客户端技术,允许开发者快速构建AJAX易于维护的交互式应用程序.由于ASP.Net AJAX模板和SharePoint 2010都支持oData协议,因此两者结合在一起将是一个强大的组合.本文将重点介绍如何使用ASP.Net AJAX 模板的在线绑定语法将数据保存回SharePoint. 单向.双向的在线绑定 前面我们使用的只读模板语法{{ [字段名] }}并不仅仅是一个简单的字

简述SharePoint 2010中的沙盒解决方案

当程序员使用Visual Studio 2010为SharePoint 2010创建应用程序时,可以创建两种类型的解决方案,服务器场解决方案和沙盒解决方案.比如,打开Visual Studio 2010,新建一个空白SharePoint项目,你看到的第一个界面就是如下这个对话框. 服务器场解决方案(或简称为场解决方案)和SharePoint 2007一样,是一种被完全信任的解决方案.场解决方案可以包含能放到解决方案包里面的所有SharePoint组件和元素,比如应用程序页.可视化Web部件等等.

如何在SharePoint 2010中使用QuickPart

是的,是的,我知道Visual Studio 2010已经提供了"可视化Web部件"模板,所以在2010版本中,确实没有理由再使用QuickPart之类的工具了(虽然QuickPart仍然支持几个VS2010可视化Web部件模板仍然不支持的功能,例如可以直接在用户控件上实现自定义属性和Web Part Connection).但是,有很多正在使用QuickPart的SharePoint Server 2007的网站,在升级到SharePoint 2010版本后,仍然希望页面上的Quic

SharePoint 2010中.Net托管客户端模型的简单示例

.Net托管客户端模型,是SharePoint2010推出的三种客户端模型".NET托管"."ECMAScript"."Sliverlight"的一种,相比Script的客户端对象模型,VS里使用的.Net客户端对象模型感觉使用起来,方便了很多,至少编写的时候会有提示,编译的时候会有错误提示,然后,我们可以把相应的两个dll文件,和编写的程序放到一起,放在客户端执行,感觉还是有收获的. 下面介绍下.Net托管的使用,首先新建一个控制台程序,选择.