如何将(声明)安全令牌传递给WIF启用WCF服务

时间:2010-09-12 22:36:31

标签: wif

我很想知道如何从已经对启用WIF的WCF服务进行身份验证的WIF应用程序发送安全令牌。

任何协助都将受到欢迎

3 个答案:

答案 0 :(得分:6)

答案并不简单,但以下步骤构成了“推荐模式”,并记录在以下MSDN文章中:  Identity Delegation with AD FS 2.0 Step-by-Step Guide

总结

  1. 允许您通过在web.config中添加项目,让Web应用程序访问可用于代表使用STS进行身份验证的用户请求服务的特殊令牌(Bootstrap令牌):

    saveBootstrapTokens="true"

  2. 在启用WCF WIF的服务和STS之间创建新的信任,以便它“知道”该服务可以充当另一个经过身份验证的用户(ActsAS)。 希望你正在使用ADFS v2,因为我想用ActsAs编写自定义STS的所有管道并不是一件容易的行为。

  3. 调用WCF服务时,您将创建一个专门传递BootStap令牌的新通道:

    channel = factory.CreateChannelActingAs(callerToken);

  4. 由于所有频道创建以及WCF服务和网络应用需要与STS服务进行通信的程度,我对性能有点担忧。

答案 1 :(得分:0)

@David Evans - 我没有声誉附加到你的答案。但是,我认为最后一步是不正确的,可能会非常混乱,因为您可以在ActingAs调用中有效地传递引导令牌。

问题是您声明应该传递引导令牌。但是,所发生的情况是,在建立ActAs信任的过程中,会创建ActAs \ Issued Token。此令牌不是引导令牌。实际上,您需要用户的引导令牌来创建此新令牌,该令牌表示依赖于特定身份验证用户的依赖派对。

所以第二步是Create ActAs令牌(涉及你提到的一切)。 第三步是使用ActAs令牌调用WCF服务,而不是引导令牌。

答案 2 :(得分:0)

Microsoft使用WIF 4.5为Identity Traningskit提供了不同的身份示例。示例InvokingViaDelegatedAccess in there demonstrates perfectly the usage of the ActAs- delegation scenario. However, it cost me days to bring the InvokingViaDelegatedAccess`示例启动并运行。在做了很多变通之后,我终于能够运行设置并执行这个例子了。我写了一本安装手册,你可以在这里下载:

enter link description here 享受))

然而,该示例在安装了Visual Studio 2012的Windows 7 VM上运行。

这是正确的,您必须保存引导令牌。登录到Web应用程序后,您必须首先缓存从SecurityTokenService发出的令牌。使用WIF 4.5,可以使用web.config中的以下命令完成:

<identityConfiguration saveBootstrapContext="true">

然后,WCF ChannelFactory具有不同的方法(CreateChannelWithActAsToken,CreateChannelWithIssuedToken,WithOnBehalfOfToken),支持从后端应用程序到WCF服务的委派方案。使用ActAs场景,CreateChannelWithActAsToken正在提取引导令牌,将bootsrap令牌发送到STS,STS正在创建具有新(或复制)声明值的新SecurityToken,然后使用ActAs-SecurityToken调用后端服务。使用此方法,每次调用服务时都会发出新的ActAs-SecurityToken。如果您不想这样做,CreateChannelWithIssuedToken可能是您的方法,因为您可以将issed令牌缓存在cookie中并重新用于其他调用。

/ patric seiler,开发人员.net www.itconsulting24.com