Claims to Windows Token Service (c2WTS) 概述

是 Windows® Identity Foundation (WIF) 的一个功能,用于从非 Windows 安全令牌(如 SAML 和 X.509 令牌)中提取 UPN 声明,并生成模拟级别 Windows 安全令牌。 这使得依赖方 (RP) 应用程序可以模拟用户。 访问后端资源时可能需要此功能,例如对运行 RP 应用程序的计算机外部的 SQL Server 进行访问。

是作为 WIF 的一部分安装的 Windows 服务。 但出于安全原因, 的运行严格建立在选择加入基础上。 必须手动启动且以本地系统帐户身份运行。 此外,管理员必须使用允许调用者列表手动配置 。 默认情况下,该列表为空。 有关更多信息,请参阅如何从 c2WTS 请求令牌。WIF 使用 IPC 调用 ,且 不会开放任何网络端口。

如果 RP 应用程序以本地系统帐户身份运行,则不需要使用 。 但是,如果 RP 应用程序以网络服务帐户身份运行,或者该应用程序是 ASP.NET 应用程序,则可能需要使用 访问另一台计算机上的资源。

假设您的 Web 场包含一个运行 ASP.NET 应用程序的服务器,该应用程序用于访问后端服务器上的 SQL 数据库。 您希望此应用程序为声明感知应用程序。 但是,该应用程序无法使用从 STS 接收的声明访问 SQL 数据库。 相反,它使用 将 UPN 声明转换为 Windows 安全令牌。 这使得它可以像以前一样访问 SQL 数据库。

(请注意,要允许应用程序访问不同服务器上的资源,域管理员必须配置 Active Directory 以启用约束委派。 有关如何启用约束委派的信息,请参阅如何在 ASP.NET 2.0 中使用协议转换和约束委派(英文)。)

备注

如果启用了 ,并且绑定为 cookie 模式安全转换,则将使用 解除冻结被序列化为安全转换 cookie 的 UPN 中的 Windows 标识。 这意味着在 cookie 模式和会话模式安全转换之间进行切换时,如果启用了 但没有正确配置,身份验证可能会失败。

如何使用 c2WTS 获取 Windows 安全令牌

有两种方法使用 :mapToWindows 或按需调用 UpnLogon 方法。 如果应用程序始终需要模拟级别 Windows 安全令牌,则可以选择启用 <securityTokenHandlers> 元素上 samlSecurityTokenRequirementmapToWindows 属性。 但是,如果应用程序只在某些特定使用情况下才需要模拟级别 Windows 安全令牌,则可以选择在需要时以编程方式调用 UpnLogon 方法。 请注意,useWindowsTokenService 属性必须设置为 true,且必须使用适当的调用者列表添加 配置才能成功调用此方法。

WIF 提供了 UpnLogon 方法,RP 应用程序可调用该方法,从而在从 STS 接收的 UPN 声明中进行传递。然后 WIF 使用 IPC 调用本地 。UpnLogon 返回表示用户的 WindowsIdentity。 下图说明了这种运行方式:

e6a9def2-c55f-427c-a30f-1a4d8d299191

  1. 客户端请求到达 RP 应用程序。 此请求需要 RP 应用程序访问外部资源。 为此,RP 应用程序必须模拟用户。

  2. RP 应用程序将客户端重定向到 IP-STS 以进行身份验证。

  3. IP-STS 对用户进行身份验证并颁发一个 SAML 令牌,其中包含 UPN 声明(即类型为 https://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn 的声明)。 请注意, 需要 UPN 字符串以执行其操作。

  4. 客户端将 SAML 令牌提交给 RP 应用程序。

  5. RP 应用程序验证该 SAML 令牌并提取 UPN 声明。

  6. RP 应用程序将 UPN 声明作为参数传递给 UpnLogon 方法,并取回 Windows 安全令牌。 Saml 1.1 和 Saml 2 这两个 SecurityTokenHandler 会自动完成此方法调用,前提是这些 SecurityTokenHandler 上 SamlSecurityTokenRequirement 的 mapToWindows 属性设置为 True,且 <microsoft.IdentityModel> 中 <windowsClaimsIdentity> 元素上的 useWindowsTokenService 值也设置为 True。

  7. RP 应用程序使用 Windows 标识来模拟用户并访问资源。