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

简介:   在SharePoint 2007时代我们可以通过Microsoft Single Sign-on Service来实现单点登录,但到了SharePoint 2010中不再有Single Sign-on这个服务了,取而代之的则是Secure Store Service简称SSS。

  在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管理中心,在应用程序管理页面选择管理服务应用程序。

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

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

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

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

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

  创建目标应用程序

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

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

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

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

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

image  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
+=上海徐汇企业网站制作/span> "</script>";
Response.Write(m_html);
}
catch (Exception ex)
{
Response.Write(
"<script>window.location.href= '/_layouts/SecureStoreSetCredentials.aspx?TargetAppId=" + m_appId + "';</script>");
}
}

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

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

 
 
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;
SPServiceCon上海企业网站制作text 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&amp上海闵行企业网站设计与制作;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上海闵行企业网站制作span> 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);
}
}
}
}
 
  
目录
相关文章
|
3月前
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
|
5月前
|
机器学习/深度学习 JSON 测试技术
CNN依旧能战:nnU-Net团队新研究揭示医学图像分割的验证误区,设定先进的验证标准与基线模型
在3D医学图像分割领域,尽管出现了多种新架构和方法,但大多未能超越2018年nnU-Net基准。研究发现,许多新方法的优越性未经严格验证,揭示了验证方法的不严谨性。作者通过系统基准测试评估了CNN、Transformer和Mamba等方法,强调了配置和硬件资源的重要性,并更新了nnU-Net基线以适应不同条件。论文呼吁加强科学验证,以确保真实性能提升。通过nnU-Net的变体和新方法的比较,显示经典CNN方法在某些情况下仍优于理论上的先进方法。研究提供了新的标准化基线模型,以促进更严谨的性能评估。
143 0
|
6月前
|
机器学习/深度学习 算法 数据可视化
MATLAB基于深度学习U-net神经网络模型的能谱CT的基物质分解技术研究
MATLAB基于深度学习U-net神经网络模型的能谱CT的基物质分解技术研究
|
开发框架 缓存 前端开发
基于.NetCore+React单点登录系统
基于.NetCore+React单点登录系统
87 0
|
机器学习/深度学习 数据采集 存储
【3-D深度学习:肺肿瘤分割】创建和训练 V-Net 神经网络,并从 3D 医学图像中对肺肿瘤进行语义分割研究(Matlab代码实现)
【3-D深度学习:肺肿瘤分割】创建和训练 V-Net 神经网络,并从 3D 医学图像中对肺肿瘤进行语义分割研究(Matlab代码实现)
263 0
|
Web App开发 开发框架 Kubernetes
临近年关,修复ASP.NET Core因浏览器内核版本引发的单点登录故障
经过测试, 出现单点登陆故障的是搜狗、360等双核浏览器(默认使用Chrome内核), 较新式的Edge、Chrome、Firefox均未出现此障碍。
临近年关,修复ASP.NET Core因浏览器内核版本引发的单点登录故障
.Net Micro Framework研究—Digi开发板初探
写的比较基础全面,由于我们北航的研发团队先研究了Digi的开发板,所以直到今天Digi开发板才到我的手上,我的《Micro Framework研究》系列文章以后也会陆续推出
738 0
.Net Micro Framework研究—IO读写
试验平台:Digi MF开发板
466 0
.Net Micro Framework研究—串口操作
试验平台:Digi MF开发板,Digi提供的示例中包含了串口的示例程序
581 0
下一篇
无影云桌面