声明演练:为 SharePoint 2010 创建受信任的登录提供程序(SAML 登录)
**摘要:**了解如何创建自定义安全令牌服务 (STS),然后在 SharePoint 2010 场与自定义 STS 之间建立信任关系。
上次修改时间: 2011年8月12日
适用范围: Business Connectivity Services | Open XML | SharePoint Designer 2010 | SharePoint Foundation 2010 | SharePoint Online | SharePoint Server 2010 | Visual Studio
本文内容
受信任的登录提供程序的用途
方案:访问承载在 Extranet 上的 SharePoint 网站
步骤 1:创建 WingtipSTS 项目
步骤 2:测试 WingtipSTS 项目声明
步骤 3:定义 WingtipSTS 项目支持的声明
步骤 4:在 SharePoint 中建立信任关系
步骤 5:创建使用 WingtipSTS 项目的 Web 应用程序
步骤 6:测试 WingtipSTS 项目身份验证
结论
其他资源
**供稿人:**Andy Li,Microsoft Corporation
目录
受信任的登录提供程序的用途
方案:访问承载在 Extranet 上的 SharePoint 网站
步骤 1:创建 WingtipSTS 项目
步骤 2:测试 WingtipSTS 项目声明
步骤 3:定义 WingtipSTS 项目支持的声明
步骤 4:在 SharePoint 中建立信任关系
步骤 5:创建使用 WingtipSTS 项目的 Web 应用程序
步骤 6:测试 WingtipSTS 项目身份验证
结论
其他资源
下载代码:受信任的登录提供程序声明示例(该链接可能指向英文页面)
受信任的登录提供程序的用途
在此演练中,将创建一个自定义安全令牌服务 (STS),然后在 Microsoft SharePoint 2010 场与该自定义 STS 之间建立信任关系。自定义 STS 用作身份验证提供程序。当用户登录 SharePoint 网站时,会先将其重定向到自定义 STS 的登录页面。在进行身份验证后,再将其重定向回 SharePoint。
备注
受信任的登录提供程序是 SharePoint 信任的外部(即在 SharePoint 外部)STS。有关声明条款的定义,请参阅基于声明的标识术语定义。
SAML 被动登录描述登录过程。在将对 Web 应用程序的登录配置为接受来自受信任登录提供程序的令牌时,此类型的登录即称为 SAML 被动登录。有关详细信息,请参阅传入声明:登录到 SharePoint。
方案:访问承载在 Extranet 上的 SharePoint 网站
假想公司 Contoso 在 Extranet 上承载了一个 SharePoint 网站,公司员工可从家或在出差期间登录到远程网站。Contoso 有一个名为 Wingtip 的合作伙伴公司,其员工与 Contoso 合作完成一个项目,他们需要从该 SharePoint 网站访问文档。
为了使 Wingtip 员工能够登录 Contoso 承载的 SharePoint 网站,Wingtip 创建了一个可对其员工进行身份验证的 STS。在 Contoso 网站上,场管理员负责在 SharePoint 场与 Wingtip 的 STS 之间建立信任关系。当 Wingtip 员工尝试登录 Contoso SharePoint 网站时,会首先将他们重定向到 STS 进行身份验证,然后该 STS 再将用户重定向到 Contoso SharePoint 网站。由于 SharePoint 场信任 Wingtip STS,所以它还信任 Wingtip STS 发出的安全令牌。
步骤 1:创建 WingtipSTS 项目
启动 Visual Studio 2010。
在"文件"菜单上,单击"新建项目"。
在"新建项目"对话框中,执行以下操作:
在左窗格中,选择"其他项目类型",单击"Visual Studio 解决方案",然后在右侧选择"空白解决方案",如图 1 所示。
在"位置"中键入 C:\StudentFiles\LabFiles\Module_6\Lab。
键入 TrustedLogin 作为解决方案"名称"。
图 1. Visual Studio 中的"新建项目"对话框
在"解决方案资源管理器"中,右键单击"TrustedLogin"解决方案,单击"添加",然后单击"新建网站"。
在"添加新网站"对话框中,执行以下操作:
选择"ASP.NET 安全令牌服务网站"模板。
将"网站位置"更改为"文件系统",将值更改为 C:\StudentFiles\LabFiles\Module_6\Lab\TrustedLogin\WingtipSTS。
图 2. Visual Studio 中的"添加新网站"对话框
打开新网站下的 web.config 文件。在"appSettings"部分,将"IssuerName"更改为"WingtipSTS"。
图 3. 更改 appSettings
备注
SigningCertificateName (CN=STSTestCert) 是 WingtipSTS 用于签署安全令牌的证书。
单击"开始",然后单击"运行"。
键入 mmc,然后按 Enter。
在 Microsoft 管理控制台中,单击"文件",然后单击"添加/删除管理单元"。
在左窗格中的"可用的管理单元"字段下,单击"证书",然后单击"添加"。
图 4. 显示 STSTestCert 的 Microsoft 管理控制台
在"证书管理单元"对话框中,依次单击"计算机帐户"和"下一步",然后选择"本地计算机"。
单击"完成",然后单击"确定"。
备注
请注意,web.config 中的"SigningCertificate"指向在此处显示为 STSTestCert 的证书。
在 WingtipSTS 与 SharePoint 之间建立信任关系时,需要告知 SharePoint WingtipSTS 所使用的证书。为此,请执行以下操作:
右键单击"STSTestCert",选择"所有任务",然后单击"导出"。
单击"下一步"。请注意,您只能从此证书中导出公钥。
单击"下一步",然后选择"DER 编码二进制 X.509(.CER)"。
单击"下一步"。在"要导出的文件"对话框中,键入 C:\StudentFiles\LabFiles\Module_6\Resources\STSTestCertPub.cert 作为文件名。
单击"下一步",然后单击"完成"。
关闭 Microsoft 管理控制台。
步骤 2:测试 WingtipSTS 项目声明
右键单击"TrustedLogin"解决方案,单击"添加",然后单击"新建网站"。
在"添加新网站"对话框中,选择"声明感知 ASP.NET 网站模板"。将"网站位置"设置为 File System,将"值"设置为 C:\StudentFiles\LabFiles\Module_6\Lab\TestRPWeb,如图 5 所示。
图 5."添加新网站"对话框
右键单击"TestRPWeb"项目,然后单击"添加 STS 引用"。
在打开的"联合实用程序"向导中的"欢迎使用联合实用程序向导"页(请参阅图 6)上,单击"下一步"。当出现"该应用程序未承载在安全 https 连接中"提示时,请单击"是"。
图 6. "欢迎使用联合实用程序向导"页
在"安全令牌服务"页上,单击"使用现有 STS 选项"。键入 https://localhost:48924/WingtipSTS/FederationMetadata/2007-06/FederationMetadata.xml 作为 STS WS 联合身份验证元数据文档位置,如图 7 所示。
备注
在您所在的环境中,此 URL 可能有所不同。若要查找正确的 URL,请在"WingtipSTS"项目中右键单击"FederationMetadata/2007-06"文件夹下的"FederationMetadata.xml"。
图 7. 包含 STS 选项的"安全令牌服务"页
单击"下一步",然后针对非安全连接单击"是"。
在"安全令牌加密"页上,单击"不加密",如图 8 所示。
图 8. "安全令牌加密"页
在"提供的声明"页上,单击"下一步",如图 9 所示。
备注
此对话框不会列出您定义的声明类型;这是正常的。
图 9. "提供的声明"页上提供的声明
在"摘要"对话框中,单击"完成"。
备注
上述步骤会向 WingtipSTS 项目的 web.config 文件中添加必需条目,这样可使网站将用户重定向到 WingtipSTS 网站,以便对用户进行身份验证并获取用户声明。
打开 web.config 文件。
从 <httpRuntime> 元素中删除 requestValidationMode="2.0"。
编译 TestRPWeb 项目并更正任何编译错误。
在"TestRPWeb"下,右键单击"Default.aspx",然后选择"在浏览器中查看"。您应被重定向到"WingtipSTS"网站的登录页面,如图 10 所示。
备注
如果出现"无法显示此页"错误,请确保 WingtipSTS 已在"Visual Studio Web 开发"中启动并运行。
图 10. WingtipSTS 登录页面
键入以下凭据:
用户名:user1@wingtip.com
密码:pass@word1(不验证密码;可使用任何密码。)
单击"提交"。您会被重定向回"TestRPWeb"网站。Default.aspx 会显示"WingtipSTS"返回的所有声明。
图 11. WingtipSTS 返回的声明
处理重定向错误
在 WingtipSTS 将您重定向回 TestRPWeb 时,您可能收到以下错误:
ID4175: IssuerNameRegistry 未识别安全令牌的颁发者。若要接受来自此颁发者的安全令牌,请配置 IssuerNameRegistry 以返回此颁发者的有效姓名。
如果收到此错误,请验证 TestRPWeb 下 web.config 文件中的 STSTestCert 指纹值是否正确。
<issuerNameRegistry
type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry,
Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral,
PublicKeyToken=31bf3856ad364e35">
<trustedIssuers>
<add thumbprint="99fcfe2c70ebb571020ca8aa1b7633dfe1fa1d58" name="https://localhost:48924/WingtipSTS/" />
</trustedIssuers>
</issuerNameRegistry>
要进行此验证,请打开证书 MMC 并在证书的"详细信息"选项卡中查找指纹,如图 12 所示。
图 12. 显示指纹的"证书"对话框
步骤 3:定义 WingtipSTS 项目支持的声明
将名为 UserInfo.cs 的类文件添加到"WingtipSTS 网站"项目下的"App_Code"文件夹中。
将以下 using 语句添加到"UserInfo.cs"中。
using Microsoft.IdentityModel.Claims;
在"UserInfo.cs"文件末尾添加以下代码。WingtipClaimTypes 类定义 WingtipSTS 支持的声明。WingtipClaimTypes 类定义 WingtipSTS 支持的声明。
public class WingtipClaimTypes { // System.IdentityModel.Claims.ClaimTypes.Email; public static string EmailAddress = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"; public static string Title = "http://schemas.wingtip.com/sharepoint/2009/08/claims/title"; }
将 UserInfo 类替换为以下代码。此类包含一些实用程序方法,WingtipSTS 可使用这些方法来检索用户声明并根据用户凭据对用户进行身份验证。
备注
此代码仅用于演示,不应在生产环境中使用。
public class UserInfo { // The email address is used as the UserID. // Every user has two claims: title and email address. // SharePoint will pick up the email claim and treat it as the identity. private static string[] userDB = { "user1@wingtip.com:Title:Engineer", "user1@wingtip.com:Email:user1@wingtip.com", "user2@wingtip.com:Title:Manager", "user2@wingtip.com:Email:user2@wingtip.com", "user3@wingtip.com:Title:CEO", "user3@wingtip.com:Email:user3@wingtip.com", }; // Manually construct a list of users. In a production environment, // you should look up a directory service or database // to retrieve the user information. public static List<string> GetAllUsers() { List<string> allUsers = new List<string>(); // Adding forms-based users. allUsers.Add("user1@wingtip.com"); allUsers.Add("user2@wingtip.com"); allUsers.Add("user3@wingtip.com"); return allUsers; } public static bool AuthenticateUser(string username, string password) { // Add your authentication logic here. return true; } /// <summary> /// A real implementation should look up a directory service or database /// to retrieve a user's claim. The code below is /// used only for demonstration purposes. /// </summary> /// <param name="username"></param> /// <returns></returns> public static List<Claim> GetClaimsForUser(string username) { List<Claim> userClaims = new List<Claim>(); foreach (string userInfo in userDB) { string[] claims = userInfo.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries); if (username == claims[0]) { userClaims.Add(new Claim(GetClaimTypeForRole(claims[1]), claims[2], Microsoft.IdentityModel.Claims.ClaimValueTypes.String)); } } return userClaims; } public static string GetClaimTypeForRole(string roleName) { if (roleName.Equals("Title", StringComparison.OrdinalIgnoreCase)) return WingtipClaimTypes.Title; else if (roleName.Equals("Email", StringComparison.OrdinalIgnoreCase)) return WingtipClaimTypes.EmailAddress; else throw new Exception("Claim Type not found!"); } }
现在,UserInfo.cs 文件中的代码如下所示。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using Microsoft.IdentityModel.Claims; public class WingtipClaimTypes { // System.IdentityModel.Claims.ClaimTypes.Email; public static string EmailAddress = "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"; public static string Title = "http://schemas.wingtip.com/sharepoint/2009/08/claims/title"; } public class UserInfo { // The email address is used as the UserID. // Every user has two claims: title and email address. // SharePoint will pick up the email claim and treat it as identity. private static string[] userDB = { "user1@wingtip.com:Title:Engineer", "user1@wingtip.com:Email:user1@wingtip.com", "user2@wingtip.com:Title:Manager", "user2@wingtip.com:Email:user2@wingtip.com", "user3@wingtip.com:Title:CEO", "user3@wingtip.com:Email:user3@wingtip.com", }; // Manually construct a list of users. In a production environment, // you should look up a directory service or database to retrieve // the user information. public static List<string> GetAllUsers() { List<string> allUsers = new List<string>(); //Adding forms-based users. allUsers.Add("user1@wingtip.com"); allUsers.Add("user2@wingtip.com"); allUsers.Add("user3@wingtip.com"); return allUsers; } public static bool AuthenticateUser(string username, string password) { // Add your authentication logic here. return true; } /// <summary> /// A real implementation should look up a directory service or database /// to retrieve a user's claim. The code below is used /// only for demonstration purposes. /// </summary> /// <param name="username"></param> /// <returns></returns> public static List<Claim> GetClaimsForUser(string username) { List<Claim> userClaims = new List<Claim>(); foreach (string userInfo in userDB) { string[] claims = userInfo.Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries); if (username == claims[0]) { userClaims.Add(new Claim(GetClaimTypeForRole(claims[1]), claims[2], Microsoft.IdentityModel.Claims.ClaimValueTypes.String)); } } return userClaims; } public static string GetClaimTypeForRole(string roleName) { if (roleName.Equals("Title", StringComparison.OrdinalIgnoreCase)) return WingtipClaimTypes.Title; else if (roleName.Equals("Email", StringComparison.OrdinalIgnoreCase)) return WingtipClaimTypes.EmailAddress; else throw new Exception("Claim Type not found!"); } }
在 App_Code 下,双击"CustomSecurityTokenService.cs"打开该文件。
向 System.Collections 中添加命名空间引用。
将 GetOutputClaimsIdentity 函数替换为以下代码。该函数返回用户的声明。
protected override IClaimsIdentity GetOutputClaimsIdentity( IClaimsPrincipal principal, RequestSecurityToken request, Scope scope ) { if ( null == principal ) { throw new ArgumentNullException( "principal" ); } ClaimsIdentity outputIdentity = new ClaimsIdentity(); // Issue custom claims. // TODO: Change the claims below to issue custom claims // that are required by your application. // Update the application's configuration file to reflect // the new claims requirements. // outputIdentity.Claims.Add( new Claim( System.IdentityModel.Claims.ClaimTypes.Name, principal.Identity.Name ) ); // outputIdentity.Claims.Add( new Claim( ClaimTypes.Role, "Manager" ) ); // The Wingtip implementation. string username = principal.Identity.Name; List<Claim> claims = UserInfo.GetClaimsForUser(username); foreach (Claim claim in claims) { outputIdentity.Claims.Add(claim); } return outputIdentity; }
编译 WingtipSTS 网站,然后更正任何编译错误。
步骤 4:在 SharePoint 中建立信任关系
在 WingtipSTS 与 SharePoint 之间建立信任关系的过程类似于在 SharePoint 场中将 WingtipSTS 注册为 SPTrustedLoginProvider 对象。
在管理中心网站的左导航窗格中,单击"安全性"。
在"一般安全性"下,单击"管理信任"。
在服务器功能区上,单击"新建"。
在"建立信任关系"对话框的"名称"文本框中,键入 STSTestCert,如图 13 所示。
图 13. 在管理中心中建立信任关系
单击"浏览",然后找到之前导出的"STSTestCertPub.cer"文件。
单击"确定"。
备注
步骤 4 允许 SharePoint 信任作为 STSTestCert 证书的根证书的所有证书。
将名为 RegisterSTS 的"WinForm"项目添加到 TrustedLogin 解决方案中。
备注
确保将"平台目标"更改为"所有 CPU",将".NET Framework"更改为"3.5"。
右键单击"RegisterSTS"项目,然后单击"设为启动项目"。
向表单中添加一个按钮并将该按钮的"文本"属性更改为"注册 WingtipSTS"。
双击该按钮。您将看到该按钮的事件处理程序函数。
将 Button1_Click 函数替换为以下代码。该代码创建一个 SPTrustedLoginProvider 对象并将其添加到 SPSecurityTokenServiceManager.TrustedLoginProviders 集合中。
备注
还可以使用 Windows PowerShell 脚本向 SharePoint 注册 STS。有关详细信息,请参阅安全 Cmdlet (SharePoint Foundation 2010)。
该代码可执行以下操作:
定义将由 SharePoint 识别的声明(在此示例中为 email 和 title)。
idClaim 定义使用哪种声明类型来唯一标识用户。
SPTrustedClaimTypeInformation 类的 AddKnownClaimValue 函数可将已知声明值添加到声明类型中,以便日后您在人员选取器中进行声明搜索时,能够找到这些值。
X509Certificate2 对象指向您之前导出的公钥。
在 SPTrustedLoginProvider 类的构造函数中,请记住修改 WingtipSTS 的 URI(端口号可能不同;此示例中的 WingtipSTS 承载在 URL https://localhost:48924/WingtipSTS/default.aspx 中)。
警告 不要忘记该 URL 中的"default.aspx"。
您可以为 SPTrustedLoginProvider 对象创建一个自定义 SPClaimProvider 对象并使用 SPTrustedLoginProvider.ClaimProviderName 对其进行注册(在以下代码中已注释掉)。否则,SharePoint 会自动为此 SPTrustedLoginProvider 对象创建一个 SPTrustdClaimProvider 对象(派生自 SPClaimProvider 类)。此 SPTrustdClaimProvider 对象基于我们在注册代码中提供的声明类型信息。
https://intranet.contoso.com/\_trust/ 是在用户通过 STS 身份验证后的重定向 URL。
private void button1_Click(object sender, EventArgs e) { List<SPTrustedClaimTypeInformation> claimMapping = new List<SPTrustedClaimTypeInformation>(); List<string> strClaimMapping = new List<string>(); SPTrustedClaimTypeInformation idClaim = new SPTrustedClaimTypeInformation("EmailAddress", "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress", "https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"); SPTrustedClaimTypeInformation titleClaim = new SPTrustedClaimTypeInformation("Title", "http://schemas.wingtip.com/sharepoint/2009/08/claims/title", "http://schemas.wingtip.com/sharepoint/2009/08/claims/title"); titleClaim.AcceptOnlyKnownClaimValues = true; idClaim.AddKnownClaimValue("user1@wingtip.com"); idClaim.AddKnownClaimValue("user2@wingtip.com"); idClaim.AddKnownClaimValue("user3@wingtip.com"); titleClaim.AddKnownClaimValue("Engineer"); titleClaim.AddKnownClaimValue("Manager"); titleClaim.AddKnownClaimValue("CEO"); // Create the string[] for all claims. This is required for // the construction of the SPTrustedLoginProvider object. strClaimMapping.Add(idClaim.InputClaimType); strClaimMapping.Add(titleClaim.InputClaimType); X509Certificate2 ImportTrustCertificate = new X509Certificate2(@"C:\StudentFiles\LabFiles\Module_6\Resources\STSTestCertPub.cer"); claimMapping.Add(idClaim); claimMapping.Add(titleClaim); SPSecurityTokenServiceManager manager = SPSecurityTokenServiceManager.Local; SPTrustedLoginProvider provider = new SPTrustedLoginProvider(manager, "WingtipSTS","WingtipSTS",new Uri("https://localhost:48924/WingtipSTS/default.aspx"), "https://intranet.contoso.com/_trust/", strClaimMapping.ToArray(),idClaim); foreach (SPTrustedClaimTypeInformation claimTypeInfo in claimMapping) { if (claimTypeInfo.InputClaimType == provider.IdentityClaimTypeInformation.InputClaimType) { continue; } provider.AddClaimTypeInformation(claimTypeInfo); } if (ImportTrustCertificate != null) { provider.SigningCertificate = ImportTrustCertificate; } //provider.ClaimProviderName = "ContosoCRMClaimProvider"; provider.UseWReplyParameter = true; manager.TrustedLoginProviders.Add(provider); manager.Update(); }
生成"RegisterSTS"项目,然后运行该项目。
单击按钮,向服务器场注册受信任的登录提供程序。
步骤 5:创建使用 WingtipSTS 项目的 Web 应用程序
浏览到"SharePoint 2010 管理中心"页。
在"应用程序管理"部分,单击"管理 Web 应用程序"。
在功能区上,单击"新建"。
在"新建 Web 应用程序"对话框中的"身份验证"下,单击"基于声明的身份验证"。
在"IIS 网站"部分的"新建 IIS 网站"下,将"名称"字段更改为"SharePoint – Trusted"。
将"端口"号更改为 443。
在"安全性配置"部分的"使用安全套接字层(SSL)"下,单击"是",如图 14 所示。
在"声明身份验证类型"部分,执行以下操作:
单击"启用 Windows 身份验证"。
单击"集成 Windows 身份验证"。
从下拉列表中单击"NTLM"。
单击"信任的身份提供程序"。
单击 WingtipSTS。
图 14."新建 Web 应用程序"对话框
在"应用程序池"下,选择现有"AppPool : SharePointAppPool"。
在"数据库名称和验证"部分,将数据库名称更改为 WSS_Content_443。将其他设置保留为默认值。
单击"确定"以创建 Web 应用程序。
创建 SSL Web 应用程序后,单击"应用程序管理",然后单击"创建网站集"。
将 Web 应用程序更改为 https://intranet.contoso.com。
键入 Trusted 作为标题。
单击"浏览网站集主管理员"。
在"人员选取器"中的"WingtipSTS"下,执行以下操作:
备注
如前所述,WingtipSTS 声明提供程序的类型为 SPTrustedClaimProvder。它由 SharePoint 在注册 SPTrustedLoginProvider 时自动生成。
选择"EmailAddress"。它显示了三个可用选项,如图 15 所示。
选择"user1@wingtip.com",然后单击"确定"。
图 15. 人员选取器
单击"确定"以创建网站集。
步骤 6:测试 WingtipSTS 项目身份验证
重要说明 |
---|
在运行此测试之前,请确保已启动并运行 WingtipSTS 项目。您可以右键单击"WingtipSTS"项目然后单击"在浏览器中查看",也可以将其部署到 Internet Information Services (IIS) 网站。 |
导航到 https://intranet.contoso.com。
在"多身份验证选择器"下拉列表中,单击"WingtipSTS",如图 16 所示。
图 16. 从下拉列表中选择 WingtipSTS
您将被重定向到 WingtipSTS 网站的登录页面,如图 17 所示。
图 17. WingtipSTS 网站的登录页面
键入网站管理员的凭据,即 user1@wingtip.com。
进行身份验证后,您将被重定向回 SharePoint 网站,如图 18 所示。
图 18. 在进行身份验证后重定向回 SharePoint 网站
部署您创建的 Web 部件并将其添加到主页中。观察并记录为用户添加了哪些声明。
在"网站操作"菜单上,单击"网站设置",然后单击"用户和组"。单击"user1@wingtip.com",然后查找帐户名称。请注意回答以下问题:
user1@wingtip.com 的 ClaimType 是什么?
user1@wingtip.com 的帐户名称是什么?
帐户名称中的每个字符有什么含义?(手动或使用代码对帐户名称解码。)
在功能区上的"网站操作"下,选择"网站权限",然后单击"授予权限"。单击"浏览"图标以打开"人员选取器"对话框。
在"WingtipSTS"下,单击"职务"。
键入经理,然后单击"搜索"。
从搜索结果中,双击"经理"将"经理"添加到用户列表中,然后单击"添加",如图 19 所示。
图 19. 显示 WingtipSTS 员工职务的人员选取器
关闭所有 Internet Explorer 实例,以清除声明身份验证会话 Cookie。
打开 Internet Explorer 的新实例并导航到 https://intranet.contoso.com。
尝试以 user2@wingtip.com 身份登录。您能否登录?如果使用 user3@wingtip.com 是否能够登录?
结论
在此演练中,您了解了如何创建自定义安全令牌服务 (STS),然后在 SharePoint 场与自定义 STS 之间建立信任关系。自定义 STS 用作身份验证提供程序。当用户登录 SharePoint 网站时,会先将他们重定向到自定义 STS 的登录页面,然后在经过身份验证后将其重定向回 SharePoint。
其他资源
有关详细信息,请参阅以下资源: