我很想知道我们如何可能从已通过 WIF 身份验证的 WIF 应用程序发送安全令牌到启用 WIF 的 WCF 服务。
任何帮助将不胜感激
答案并不简单,但以下步骤构成了“推荐模式”,并记录在以下 MSDN 文章中: 使用 AD FS 2.0 的身份委派分步指南
总之
通过在 web.config 中添加一个项目,允许您的 Web 应用程序访问一个特殊的令牌(引导令牌),该令牌可用于代表已使用 STS 进行身份验证的用户请求服务:
saveBootstrapTokens="true"
在启用 WCF WIF 的服务和 STS 之间创建新的信任,以便它“知道”该服务可以充当另一个经过身份验证的用户 (ActsAS)。希望您使用的是 ADFS v2,因为我想象为具有 ActsAs 行为的自定义 STS 编写所有管道并非易事。
调用 WCF 服务时,您将创建一个专门传递 BootStap 令牌的新通道:
channel = factory.CreateChannelActingAs(callerToken);
由于所有通道的创建以及 WCF 服务和 Web 应用程序需要与 STS 服务通信的程度,我有点担心性能。
@David Evans - 我没有附加到您的答案的声誉。但是,我认为最后一步是不正确的,并且可能会非常混乱,因为您可以在 ActingAs 调用中有效地传递引导令牌。
问题是您声明您应该传递引导令牌。然而,实际情况是,在建立 ActAs 信任的过程中,会创建一个 ActAs\Issued Token。此令牌不是引导令牌。实际上,您需要用户的引导令牌来创建这个新令牌,它代表依赖方充当特定的经过身份验证的用户。
因此,第二步是创建 ActAs 令牌(涉及您提到的所有内容)。第三步是使用 ActAs 令牌而不是引导令牌调用 WCF 服务。
Microsoft 使用 WIF 4.5 提供了具有不同身份示例的身份转换工具包。示例InvokingViaDelegatedAccess in there demonstrates perfectly the usage of the ActAs- delegation scenario.
However, it cost me days to bring the
InvokingViaDelegatedAccess` 示例启动并运行。在做了很多解决方法之后,我终于能够运行设置并执行这个示例。我写了一个安装手册,你可以在这里下载:
在此处输入链接描述 享受))
然而,该示例在安装了 Visual Studio 2012 的 Windows 7 VM 上运行。
正确的是,您必须保存引导令牌。登录到您的 Web 应用程序后,您必须首先缓存从 SecurityTokenService 发出的令牌。使用 WIF 4.5,这可以通过 web.config 中的以下命令来完成:
<identityConfiguration saveBootstrapContext="true">
然后,WCF ChannelFactory 具有不同的方法(CreateChannelWithActAsToken、CreateChannelWithIssuedToken、WithOnBehalfOfToken) 支持从后端应用程序到 WCF 服务的委派方案。使用 ActAs 场景,CreateChannelWithActAsToken 提取引导令牌,将引导令牌发送到 STS,STS 使用新的(或复制的)声明值创建新的 SecurityToken,然后使用 ActAsSecurityToken 调用后端服务。使用此方法,每次调用服务时都会颁发一个新的 ActAs-SecurityToken。如果你不想要这个, CreateChannelWithIssuedToken 可能是你最好的方法,因为你可以将发出的令牌缓存在 cookie 中,并将其重新用于其他调用。
/patric seiler,开发商 .net www.itconsulting24.com