SharePoint 2013 SSO-Secure Store Service在实际案例中的应用
文章目录:
之前有一篇博客讲到使用EMSManagedAPI操作Exchange邮箱,在实际SharePoint开发中,用户总是会要求在SharePoint中集成现有exchange邮件系统。在集成的过程中,如何读取、新建、更改邮件(任务、会议)是首先要解决的问题,接下来要解决的是如何通过用户验证,也就是我们经常讲到的单点登陆。由于owa采用表单验证的方式,且没有找到很好的SharePoint单点登陆有效方案,所以采用了SharePoint2010以后引入的SSS(Secure Store Service),07版本是SSO。下面就来介绍一下SharePoint Secure Store Service 在实际案例中的应用。
Secure Store Service 是SharePoint Server提供的运行在应用程序服务器上的授权服务。Secure Store Service将用户凭据存储于一个凭据的数据库,录入用户信息时,会使用密钥加密。用户凭据通常包含用户名和密码,也可以根据需要包含其他属性。通过获取Secure Store Service存储的凭据,可以用于访问其他外部应用。根据微软官方的描述,在SharePoint应用Secure Store Service的解决方案包括:
- Excel Services 可使用安全存储提供对已发布工作簿中的外部数据源的访问。这可以用作将用户凭据传递给数据源(此过程通常需要配置 Kerberos 委托)的替代方式。如果您需要为数据身份验证配置无人参与服务帐户,则 Excel Services 需要安全存储。
Visio Services 可使用安全存储提供对已发布的数据连接图表中的外部数据源的访问。这可以用作将用户凭据传递给数据源(此过程通常需要配置 Kerberos 委托)的替代方式。如果您需要为数据身份验证配置无人参与服务帐户,则 Visio Services 需要安全存储。
PerformancePoint Services 可使用安全存储提供对外部数据源的访问。如果您需要为数据身份验证配置无人参与服务帐户,则 PerformancePoint Services 需要安全存储。
PowerPivot 需要安全存储以便对 PowerPivot 工作簿进行计划刷新。
Microsoft Business Connectivity Services 可使用安全存储将用户凭据映射到外部系统中的一组凭据。您可将每个用户的凭据映射到外部系统中的唯一帐户,也可以将一组经过身份验证的用户映射到单个组帐户。Business Connectivity Services 还可以使用安全存储来存储用于访问 SharePoint Online 中的本地数据源的凭据。
SharePoint 运行时可使用安全存储来存储与 Azure 服务进行通信所必需的凭据(如果任何用户应用程序需要 SharePoint 运行时来设置和使用 Azure 服务)。
本文是除以上解决方案中的另外一种应用。
在使用Secure Store Service前,我们做一些设置。
一、首先,打开SharePoint管理中心,进入应用程序管理,点击“管理服务应用程序”
在服务应用程序列表中,找到Secure Store Service服务。该服务会在运行配置向导过程中默认配置,也可以点击新建手动配置(手动配置方法请看官方文档)。
二、点击进入Secure Store Service服务
1、首次配置,要生成新密钥
2、生成新密钥后,就可以新建目标应用程序,点击新建
3、进入新建页面后,填写相关内容
目标应用程序 ID:此ID用来唯一标识该应用程序;
显示名称:目标应用程序显示名称
联系人email:填写管理员email,用来用户联系管理员;
目标应用程序类型:根据需要选择类型,比如“个人”用来存储个人凭据,“组”用来存储组凭据(一个用户组用一个凭据)
目标应用程序页 URL:一般选择默认页,系统会有一个默认页面(http:/<samplesite>/_layouts/SecureStoreSetCredentials.aspx?TargetAppId=<TargetApplicationID>)用来录入用户凭据。
4、点击下一步,进入配置字段页面,按照需要添加凭据需要包含的字段(注:以后不能编辑字段名称和字段类型)
在这里,我除默认的用户名和密码外,另外添加一列EmailAddress用来存储用户邮箱,类型选择一般(Genetic)。
5、继续点击下一步
添加目标应用程序管理员,点击完成,完成创建目标应用程序
至此我们已经完成了Secure Store Service的准备工作,接下来就是实际应用的实践。
一、用户凭据录入
你可以使用系统默认的页面(http:/<samplesite>/_layouts/SecureStoreSetCredentials.aspx?TargetAppId=<TargetApplicationID>)用于用户凭据录入,也可以使用自定义的页面创建、更新用户凭据。下面的代码用来更新(创建)当前用户的特定目标应用程序凭据:

public static void SetCredentials(string appId, string[] userInfo)
{
List<SecureStoreCredential> creds = new List<SecureStoreCredential>();
SecureStoreCredential name = new SecureStoreCredential(toSecureString(userInfo[]), SecureStoreCredentialType.WindowsUserName);
SecureStoreCredential pwd = new SecureStoreCredential(toSecureString(userInfo[]), SecureStoreCredentialType.WindowsPassword);
SecureStoreCredential EmailAddress = new SecureStoreCredential(toSecureString(userInfo[]), SecureStoreCredentialType.Generic);
creds.Add(name);
creds.Add(pwd);
creds.Add(EmailAddress);
SecureStoreCredentialCollection credes = new SecureStoreCredentialCollection(creds.ToArray());
SecureStoreServiceProxy proxySs = new SecureStoreServiceProxy();
SPSite site = null;
SPWeb web = null;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
site = SPContext.Current.Site;
web = SPContext.Current.Web;
});
site.AllowUnsafeUpdates = true;
web.AllowUnsafeUpdates = true;
SPServiceContext context = SPServiceContext.GetContext(site);
ISecureStore store = proxySs.GetSecureStore(context);
store.SetCredentials(appId, credes);
web.AllowUnsafeUpdates = false;
site.AllowUnsafeUpdates = false;
}

参数介绍: appid:目标应用程序ID,也就是上面步骤新建的“FirstID”;
userInfo:从页面中获取的用户信息列表;
方法介绍:
1、创建字段实例(注:实例名称与实际目标应用程序字段名称没有关联,只要顺序对就可以了,当然类型要一致)
SecureStoreCredential name = new SecureStoreCredential(toSecureString(userInfo[]), SecureStoreCredentialType.WindowsUserName);
上面这句语句是创建一个凭据字段,对应FirstID中的“Windows用户名”,此类型包含一个2个参数的构造函数(字段值,字段类型);
2、创建Secure Store Service代理,获取当前SharePoint Secure Store Service上下文环境
3、为site,web提升权限
SPSecurity.RunWithElevatedPrivileges(delegate() { site = SPContext.Current.Site; web = SPContext.Current.Web; }); 4、使用ISecureStore的SetCredentials方法更新(创建)用户凭据。
5、最后,会注意到有一个toSecureString方法,这个方法是对字符串进行安全编码,代码是:
public static System.Security.SecureString toSecureString(string s)
{
System.Security.SecureString secureString = new System.Security.SecureString(); foreach (Char character in s)
{
secureString.AppendChar(character);
} return secureString;
}
利用上面的代码,就可以为用户配置目标应用程序的凭据。
二、根据当前用户获取该用户凭据信息
使用上面的方法将用户凭据录入后,下一步就是利用Secure Store Service获取用户凭据。
在使用EMSManagedAPI操作Exchange邮箱所在的博客中,有一个步骤是需要用户的账号和密码。另外,上面在创建目标应用程序的过程中,多加了一列EmailAddress,这样我们就可以用EWS Managed API中AutodiscoverUrl方法,而不需要知道具体的邮件服务器服务地址,代码就可以改为:
原代码:
service.Credentials = new WebCredentials(creds);
service.Url = new Uri("https://服务器地址/ews/exchange.asmx");
service.PreAuthenticate = true;
修改后:
service.Credentials = new WebCredentials(creds);
service.AutodiscoverUrl(EmailAddress);
service.PreAuthenticate = true;
上面是对之前应用的一点优化,如果有兴趣,可以去看之前的博客。接下来是如何取得用户凭证的实例。
Secure Store Service不需要指定用户,会直接根据当前上下文获得当前登陆用户,下面是获取用户信息列表的方法:

public List<string> GetUserCredentialCollection(string appId, SPServiceContext CurrentContext)//appid is the SSS' ID
{
List<string> credentialList = new List<string>();
SecureStoreProvider prov = new SecureStoreProvider();
SPServiceContext context = CurrentContext; prov.Context = context; //当前上下文信息,以便从上下文中找到当前登陆用户
try
{
SecureStoreCredentialCollection cc = prov.GetCredentials(appId);
for (int i = ; 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;
}

其实最重要的是for循环中的方法,根据目标应用程序ID,获取用户凭据集合,遍历用户凭据字段并存放到List中,之后就可以根据个人需求来利用这些信息。
到这里Secure Store Service的应用基本就结束了,总体来说Secure Store Service有利有弊,对于安全性要求很高的用户来说,可能并不是一个最佳的选择。但Secure Store Service得灵活性较好,可以存储用户的多个应用程序凭据,对于多个系统集成有很好的兼容性。有兴趣的朋友,可以一起讨论,这篇博客就先写到这里了。
转自:http://www.cnblogs.com/renzh/archive/2013/03/31/2990280.html
SharePoint 2013 SSO-Secure Store Service在实际案例中的应用的更多相关文章
- 为Secure Store Service生成新密钥,解决“生成密钥过程中发现错误”的问题
我们集成TFS和SharePoint Server以后,一个最常见的需求是通过SharePoint Server的Excel Service读取TFS报表中的信息,利用Excel Service的强大 ...
- SharePoint Secure Store Service(SSSS)的使用(一)
SSS在案例中的应用: SSS介绍 SSS部署 SSS应用 http://www.cnblogs.com/renzh/archive/2013/03/31/2990280.html 创建.部署.应用S ...
- Sharepoint2013商务智能学习笔记之Secure Store Service服务配置(二)
Secure Store Service 是运行在应用程序服务器上的授权服务,它提供一个存储用户凭据的数据库,Secure Store Service 在商务智能中的地位很重要,Sharepoint商 ...
- SharePoint 2013创建WCF REST Service
SharePoint 2013为开发者提供了丰富的REST API,方便了我们在客户端操作List中的数据.当然我们也可以在SharePoint 2013中创建自定义的REST Service,比如通 ...
- SharePoint在管理中心创建Secure Store
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012025054/article/details/35780063 SharePoint在管理中心 ...
- SharePoint 2013 版本功能对比
前言:在SharePoint使用中,经常纠结于版本问题,SharePoint 2013主要有免费的Foundation和收费的标准版.企业版三个版本,他们之间的功能上是不一样的,找了一些资料才发现下面 ...
- Sharepoint 2013 系列篇(安装部署)--上篇
前言 sharepoint的部署是按照物理拓扑图的架构来部署,按照物理拓扑图架构分为一层拓扑图架构,二层拓扑图架构,三层拓扑图架构,多层拓扑图架构. 按照分层的拓扑图部署是按照需求来划分的,一层拓扑图 ...
- SharePoint 2013版本功能对比介绍
转:http://www.fengfly.com/plus/view-213720-1.html 在SharePoint使用中,经常纠结于版本问题,SharePoint 2013主要有免费的Found ...
- Install SharePoint 2013 on Windows Server 2012 without a domain
Any setup of Team Foundation Server is not complete until you have at least tried t work with ShareP ...
随机推荐
- PAT (Basic Level) Practise (中文)- 1013. 数素数 (20)
http://www.patest.cn/contests/pat-b-practise/1013 令Pi表示第i个素数.现任给两个正整数M <= N <= 104,请输出PM到PN的所有 ...
- 使用的是html5的canvas将文字转换成图片
当前功能的运用场景是:用户需要传文件给他人,在用户选择文件之后需要显示一个文件图标和所选文件的名称. 当前代码部分是摘自网上,但是已经忘记在什么地方获取的,如有侵权联系小弟后自当删除. 注意:必须在h ...
- runtime实践之Method Swizzling
利用 Objective-C 的 Runtime 特性,我们可以给语言做扩展,帮助解决项目开发中的一些设计和技术问题.这一篇,我们来探索一些利用 Objective-C Runtime 的黑色技巧.这 ...
- CentOS7下Mysql5.7主从数据库配置
本文配置主从使用的操作系统是Centos7,数据库版本是mysql5.7. 准备好两台安装有mysql的机器(mysql安装教程链接) 主数据库配置 每个从数据库会使用一个MySQL账号来连接主数据库 ...
- Java AES加密解密工具 -- GUI 、在线传输文件
原理 对于任意长度的明文,AES首先对其进行分组,每组的长度为128位.分组之后将分别对每个128位的明文分组进行加密. 对于每个128位长度的明文分组的加密过程如下: (1)将128位AES ...
- 【Python学习之五】高级特性5(切片、迭代、列表生成器、生成器、迭代器)
5.迭代器 由之前的生成器可知,for循环用于可迭代对象:Iterable.包括集合数据类型: list.tuple.dict.set.str 等,以及两种生成器.判断迭代器,使用 isinstanc ...
- CentOS7.2下Hadoop2.7.2的集群搭建
1.基本环境: 操作系统: Centos 7.2.1511 三台虚机: 192.168.163.224 master 192.168.163.225 node1 192.168.163.226 ...
- POJ:2342-Anniversary party(树形dp入门题目)
传送门:http://poj.org/problem?id=2342 Anniversary party Time Limit: 1000MS Memory Limit: 65536K Descrip ...
- Linux学习-备份的种类、频率与工具的选择
完整备份之累积备份 (Incremental backup) 还原的考虑 如果是完整备份的话.若硬件出问题导致系统损毁时,只要将完整备份拿出来,整个给他倾倒回去硬盘, 所有事情就搞定了!有些时候 (例 ...
- 【Linux】tcpdump命令详解
tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析. 它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句帮你过滤到无用的信息. 实用命令实例 1.普通 ...