声明提示 3:了解 SharePoint 2010 中基于声明的身份验证 您所在的位置:网站首页 声明提示 声明提示 3:了解 SharePoint 2010 中基于声明的身份验证

声明提示 3:了解 SharePoint 2010 中基于声明的身份验证

2023-07-26 22:21| 来源: 网络整理| 查看: 265

声明提示 3:了解 SharePoint 2010 中基于声明的身份验证 项目 07/02/2015

**摘要:**了解与 SharePoint 2010 中基于声明的身份验证相关的五个提示,包括有关打包、检索 REST 数据、添加策略、管理受信任的根证书颁发机构以及解决登录页面问题的信息。

上次修改时间: 2011年3月28日

适用范围: Business Connectivity Services | Open XML | SharePoint Designer 2010 | SharePoint Foundation 2010 | SharePoint Online | SharePoint Server 2010 | Visual Studio

本文内容 本文的范围概述 提示 1:在 Visual Studio 2010 SharePoint 项目中打包 SharePoint 2010 自定义声明提供程序 提示 2:在 SharePoint 2010 中的基于声明的身份验证网站中检索 REST 数据 提示 3:在 SharePoint 2010 中使用 Windows PowerShell 向 Web 应用程序策略添加自定义声明 提示 4:在 SharePoint 2010 管理中心内管理基于声明的身份验证的受信任的根证书颁发机构 提示 5:在 SharePoint 2010 中解决 AD FS 身份验证页面登录问题 结论 其他资源

**供稿人:**Steve Peschka,Microsoft Corporation

目录

本文的范围概述

提示 1:在 Visual Studio 2010 SharePoint 项目中打包 SharePoint 2010 自定义声明提供程序

提示 2:在 SharePoint 2010 中的基于声明的身份验证网站中检索 REST 数据

提示 3:在 SharePoint 2010 中使用 Windows PowerShell 向 Web 应用程序策略添加自定义声明

提示 4:在 SharePoint 2010 管理中心内管理基于声明的身份验证的受信任的根证书颁发机构

提示 5:在 SharePoint 2010 中解决 AD FS 身份验证页面登录问题

结论

其他资源

本文的范围概述

本文针对与 Microsoft SharePoint 2010 中基于声明的身份验证相关的常见问题提供提示与解答。它还提供了一些提示和指导以帮助解决与使用和配置声明相关的问题,并且提供了指向其他资源的链接以帮助您获取详细信息。

提示 1:在 Visual Studio 2010 SharePoint 项目中打包 SharePoint 2010 自定义声明提供程序

如果您一直使用 SharePoint 2010 为 Microsoft Visual Studio 2010 开发解决方案,则可能已经注意到一个与自定义声明提供程序有关的细微的打包特质。在 Visual Studio 2010 中,可以创建一个新功能,然后右键单击该功能并选择"添加事件接收器"菜单向该功能轻松添加功能事件接收器。这是不错的做法,因为可提高生产力,并使您能更轻松地使用解决方案代码,而不是把时间花在配置上。

但是,连接会断开,因为默认情况下,Visual Studio 2010 添加的事件接收器继承自 SPFeatureReceiver。如您所知,用于注册自定义声明提供程序的事件接收器必须继承自 SPClaimProviderFeatureReceiver(请参见 声明演练:编写 SharePoint 2010 的声明提供程序)。另外,Visual Studio 中的内置 SharePoint 智能无法提供一个真正直观的方法来向 SharePoint 2010 项目中添加一个类,然后将它与一个功能关联。

不过,有一个相当简单轻松的解决方法。我以前曾经从通常的起点(有一个以前编写的自定义声明提供程序和一个要安装该提供程序的对应的功能接收器)开始采用过这个方法。这两个类是单一项目的一部分。我确定自己确实要使用 Visual Studio 2010 中的新打包功能,以下是实现这一点的方式:

完成自定义声明提供程序项目和相应事件接收器的首次代码运行以进行注册,然后编译它。查看已编译的程序集以获取程序集的强名称与事件接收器的类名称。

向解决方案添加新项目。将新项目基于 SharePoint 2010 的"空白 SharePoint 项目"模板。配置要部署为服务器场解决方案的项目。

右键单击项目中的"功能"节点,然后选择"添加功能"。功能的范围应限定为"服务器场"且应自动激活。否则,为要尝试执行的操作配置适当的功能属性。重要内容:在描述的功能(位于"Visual Studio 属性"窗口中)上配置以下两个属性:

接收器程序集   键入步骤 1 中所述的程序集的强名称。

例如,键入以下内容:MyClaimProvider.ClaimTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=edb00fee02fa0701

接收器类    键入在步骤 1 中为自定义声明提供程序编写的事件接收器类的名称。

例如,键入以下内容:MyClaimProvider.ClaimTest.MyClaimsFeatureReceiver

将已编译的自定义声明提供程序程序集添加到打包解决方案正部署的程序集的列表中,如下所示:

双击 Visual Studio 打包项目中的"Package.package"节点。

在"高级"选项卡上,单击"添加",然后单击"添加现有程序集"。

找到已编译自定义声明提供程序程序集的正确位置,并将默认的"部署目标: GlobalAssemblyCache"保持选中状态。

单击"确定"保存您的更改,然后关闭"包"属性窗口。

在步骤 4 中有一个地方要注意:我通常会在打包项目中创建一个文件夹,在其中复制要与解决方案一起分发的其他项目中的已编译程序集。当我在"包"窗口中配置其他程序集时,仅从打包项目中的文件夹中选择程序集。在其他项目中,我有一个生成后脚本,该脚本会自动将已编译的程序集复制到打包项目中的此程序集文件夹。由于它是一个复制程序集的简单代码生成后行(无论它是调试生成还是发布生成),这样我就不用每次记住要自行执行此操作。代码如下(假定您创建了一个名为 GacFiles 的文件夹,用于存储这些程序集)。

copy "$(TargetPath)" ..\..\..\MyPackagingProject\GacFiles /Y

您的包现已完成。您只需编译包项目,然后在项目的快捷方式(右键单击)菜单上,选择"包"。之后,您便具有一个可分发的解决方案包(.wsp 文件),并且可使解决方案包自动发布到自定义声明提供程序。

提示 2:在 SharePoint 2010 中的基于声明的身份验证网站中检索 REST 数据

备注

此提示是有关声明和要发布的 SharePoint 2010 的白皮书的一节中的一小部分。

SharePoint 2010 提供通过具象状态传输 (REST) 接口检索列表数据的功能。在此示例中,我重用了获取 FedAuth Cookie 的代码,该 Cookie 包含在在 SharePoint 2010 中将客户端对象模型与基于声明的身份验证网站一起使用(该链接可能指向英文页面)博客文章中。在获取 FedAuth Cookie 之后,我重复它来发起调用,以便通过 REST 检索列表数据。

此调用略有不同,因为我们需要在 SharePoint 2010 中直接对列表数据服务执行 HTTP GETs 操作。通过导航到 _vti_bin 目录,可在任何网站中使用列表数据服务。例如,如果您具有一个位于 https://contoso 的网站,则若要获取该网站上的"联系人"列表中的所有项,您可以向 https://contoso/_vti_bin/listdata.svc/Contacts 发出请求。该数据以 XML 形式返回,然后您可以根据应用程序的需要进行处理。

以下是一个代码示例,它重用方法以获取 FedAuth 票证,然后检索"联系人"列表中所有项的列表。

private void GetRestDataBtn_Click(object sender, EventArgs e) { try { //This is the REST endpoint that I want to use to get all Contacts. string endpoint = "https://fc1/_vti_bin/listdata.svc/Contacts"; //Get the FedAuth cookie. string FedAuth = GetSamlToken(); //Make a request to the REST interface for the data. HttpWebRequest webRqst = (HttpWebRequest)WebRequest.Create(endpoint); webRqst.UseDefaultCredentials = true; webRqst.Method = "GET"; webRqst.Accept = "*/*"; webRqst.KeepAlive = true; //Create the FedAuth cookie that goes with our request. CookieContainer cc = new CookieContainer(); Cookie samlAuth = new Cookie("FedAuth", FedAuth); samlAuth.Expires = DateTime.Now.AddHours(1); samlAuth.Path = "/"; samlAuth.Secure = true; samlAuth.HttpOnly = true; Uri samlUri = new Uri(SamlTxt.Text); samlAuth.Domain = samlUri.Host; cc.Add(samlAuth); //Plug our cookie into the request. webRqst.CookieContainer = cc; //Read the response now. HttpWebResponse webResp = webRqst.GetResponse() as HttpWebResponse; //Make the request and get the response. StreamReader theData = new StreamReader(webResp.GetResponseStream(), true); string payload = theData.ReadToEnd(); theData.Close(); webResp.Close(); //Create the XML classes for working with the results. XmlDocument xDoc = new XmlDocument(); //XML doc, loaded with the results. xDoc.LoadXml(payload); //Namespace manager, used for querying. XmlNamespaceManager ns = new XmlNamespaceManager(xDoc.NameTable); ns.AddNamespace("b", "http://www.w3.org/2005/Atom"); ns.AddNamespace("m", "https://schemas.microsoft.com/ado/2007/08/dataservices/metadata"); ns.AddNamespace("d", "https://schemas.microsoft.com/ado/2007/08/dataservices"); //Query for items. XmlNodeList nl = xDoc.SelectNodes("/b:feed/b:entry/b:content/m:properties", ns); //Create a list to hold the results. List Contacts = new List(); //Enumerate the results. foreach (XmlNode xNode in nl) { Contacts.Add(new Contact( xNode.SelectSingleNode("d:FirstName", ns).InnerText, xNode.SelectSingleNode("d:LastName", ns).InnerText, xNode.SelectSingleNode("d:Company", ns).InnerText, xNode.SelectSingleNode("d:JobTitle", ns).InnerText, xNode.SelectSingleNode("d:EMailAddress", ns).InnerText)); } //Bind to the DataGridView on my form. ContactGrd.DataSource = Contacts; } catch (Exception ex) { //Add your error code handling here. } } public class Contact { public string FirstName { get; set; } public string LastName { get; set; } public string Company { get; set; } public string JobTitle { get; set; } public string Email { get; set; } public Contact(string First, string Last, string Company, string Title, string Email) { this.FirstName = First; this.LastName = Last; this.Company = Company; this.JobTitle = Title; this.Email = Email; } }

逐步查看代码,您将发现首先会从 SharePoint 2010 中获取 FedAuth Cookie,如我之前链接到的博客文章中所述:在 SharePoint 2010 中将客户端对象模型与基于声明的身份验证网站一起使用(该链接可能指向英文页面)。获取 Cookie 之后,发出一个 HttpWebRequest,用于调用 SharePoint 中的 REST 接口以检索"联系人"列表中的所有项。创建一个新 Cookie,可在其中放置已检索到的 FedAuth Cookie;这就允许 SharePoint 查看要进行身份验证的请求。添加 Cookie 后,向 SharePoint 中的 REST 接口发出请求以检索数据。结果将置于字符串变量负载中。

提示 3:在 SharePoint 2010 中使用 Windows PowerShell 向 Web 应用程序策略添加自定义声明

我之前认为此过程会比预想的要难一些,但在我完成此过程后却发现它比预想的容易多了,因此我认为我应提供一个快速提示。任务是使用 Windows PowerShell 将自定义声明添加到 Web 应用程序策略。

通过使用 SharePoint 管理中心用户界面将自定义声明添加到 Web 应用程序相当简单。但是,使用 Windows PowerShell 执行此操作却不一样,尤其是在您以前从未执行过此操作时。我最初采用此方法创建一个 New-SPClaimsPrincipal 以添加到区域策略。下面给你看看更有意思的,以下是我尝试过的各种方法(远远少于我尝试过的所有不同方法)。

#$tp = Get-SPTrustedIdentityTokenIssuer -Identity "ADFS with Roles" #$cp = Get-SPClaimProvider -Identity "BasketballTeamProvider" #$account = New-SPClaimsPrincipal -ClaimValue "Wingtip Toys" -ClaimType "Role" -TrustedIdentityTokenIssuer $tp #$account = New-SPClaimsPrincipal -Identity "Wingtip Toys" -TrustedIdentityTokenIssuer $tp #$account = New-SPClaimsPrincipal -Identity "c:0ǹ.c|basketballteamprovider|wingtip toys" -IdentityType EncodedClaim #$account = New-SPClaimsPrincipal -ClaimValue "Wingtip Toys" -ClaimType "http://schema.steve.local/teams" -ClaimProvider $cp.ClaimProvider #$account = New-SPClaimsPrincipal -EncodedClaim "c:0ǹ.c|basketballteamprovider| wingtip toys "

这些方法中的许多方法都成功添加了声明,但很明显它并不是正确的标识符,因为未实现策略(即,我授予了"完全控制"权限,但具有此声明的用户无法登录)。这就是所谓的"比预想的难一些"阶段。

为了使其正常工作,我真的无需 New-SPClaimsPrincipal 对象。相反,以下 Windows PowerShell 代码正确添加了声明并使其正常工作。

$WebAppName = "https://contoso1" $wa = get-SPWebApplication $WebAppName $account = "c:0ǹ.c|basketballteamprovider|wingtip toys " $zp = $wa.ZonePolicies("Default") $p = $zp.Add($account,"Claims Role") $fc=$wa.PolicyRoles.GetSpecialRole("FullControl") $p.PolicyRoleBindings.Add($fc) $wa.Update()

因此,仅将自定义声明作为简单字符串添加这一方法很有效。请注意,为了获取 $account 值,我仅使用管理中心添加了策略,然后在完成时复制了它显示的声明值。之后,我在代码中使用了从用户界面复制的声明值。这可以为您节省一些时间,您将来需要执行此操作。

提示 4:在 SharePoint 2010 管理中心内管理基于声明的身份验证的受信任的根证书颁发机构

我想我创建此提示的目的在于提高对用于在 SharePoint 2010 中管理受信任的根颁发结构的其他方法的认识。对于那些一直在创建声明身份验证网站的人来说,他们知道需要将令牌签名证书链中的所有证书添加到包含 SharePoint 受信任网站的 SharePoint 列表中。我在博客文章中演示的所有以前的示例都是通过 Windows PowerShell 完成的。为了实现平等对待,我认为应让大家都知道可在管理中心内执行相同的操作。

可使用管理中心添加、更改或删除令牌签名证书链的受信任的根证书颁发机构。为此,请转到"SharePoint 2010 管理中心",单击"安全性",然后单击"管理信任"。这会使您进入"信任关系"页面。在此页面上,您会看到已定义的受信任的根证书颁发机构。通过浏览 SharePoint 上载并用来建立信任的证书,可以添加或编辑信任。只需确保不删除"本地"受信任证书,这适用于内部 SharePoint 安全令牌服务 (STS)。

提示 5:在 SharePoint 2010 中解决 AD FS 身份验证页面登录问题

我在解决 Active Directory 联合身份验证服务 (AD FS) 身份验证页面登录问题时多次遇到了困难,我认为应描述此问题和解决方法,因为我坚信其他人也遇到了同样的问题。

假定您已将 SharePoint Web 应用程序配置为使用 SAML 声明,并且标识提供程序安全令牌服务 (IP-STS) 为 Active Directory 联合身份验证服务 (AD FS) 2.0。有时,我发现在 SharePoint 重定向到 AD FS 登录页面后,浏览器只是"停止"。状态显示为"完成",就像已完全加载页面且空白页面为获得的一切内容。浏览器中的地址栏会显示正确的 AD FS 服务器 URL。未显示错误,并且浏览器的外观与其在 AD FS 登录页面上的外观类似。但决不会执行以下操作:对您进行身份验证、提示您输入凭据以及发送回您的 SharePoint 网站。

在发生此情况时,我发现问题在于,我已在浏览器中配置一台代理服务器,并且正在将请求重定向到 AD FS 服务器的完全限定的域名(即,https://adfs.contoso.com)。

若要解决此问题,请在 Internet 资源管理器中,执行以下操作:

在"工具"菜单上,单击"Internet 选项"。

在"连接"选项卡上,单击"局域网设置"。

单击"高级"以打开"代理设置"窗口。

"代理设置"窗口中有一个针对例外的文本框。可向"例外"文本框中添加您不希望代理服务器尝试为您解析的 URL。如果您将 AD FS 服务器的 URL 添加到该列表,然后保存您的更改,则您应能成功进行重定向并进行身份验证。

遗憾的是,浏览器中未提供针对该问题的内容的任何反馈。如果您看到"空白屏幕"浏览器页面,请考虑将此提示作为可能的更正方法。

结论

本文针对有关 SharePoint 2010 中基于声明的身份验证的一些常见问题提供了解答。它还提供了五个提示和指导以帮助解决与使用和配置声明相关的问题,并且提供了指向其他资源的链接以帮助您获取详细信息。

其他资源

有关详细信息,请参阅以下资源:

Steve Peschka 的博客:Share-n-dipity(该链接可能指向英文页面)

安全 Cmdlet (SharePoint Foundation 2010)

安全性博客、资源中心和 SharePoint 论坛

声明提示 1:了解 SharePoint 2010 中基于声明的身份验证

声明提示 2:了解 SharePoint 2010 中基于声明的身份验证

声明演练:编写 SharePoint 2010 的声明提供程序

声明演练:为 SharePoint 2010 的受信任登录提供程序创建声明提供程序

Forms Authentication in SharePoint Products and Technologies (Part 1): Introduction

SharePoint 2010 中针对开发人员的安全性最佳做法

声明演练:使用 ASP.NET SQL 成员资格和角色提供程序为基于声明的 SharePoint 2010 Web 应用程序创建基于表单的身份验证

声明演练:为 SharePoint 2010 创建受信任的登录提供程序(SAML 登录)

Microsoft SharePoint 2010 中的声明提供程序

传入声明:登录到 SharePoint

基于声明的标识术语定义

Microsoft.SharePoint.Administration.Claims

规划、升级、迁移、管理、配置和设置

SharePoint 2010 安全性视频演示(该链接可能指向英文页面)

SharePoint 2010 Advanced Developer Training

安全资源中心 | SharePoint 2010(该链接可能指向英文页面)

SharePoint 开发中心



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有