.net 具有多个提供者的WCF身份验证

.net 具有多个提供者的WCF身份验证,.net,asp.net,wcf,security,authentication,.net,Asp.net,Wcf,Security,Authentication,有以下设计:后端实现为WCF、公共前端站点和两个intranet站点(三个站点都与后端通信)。我认为站点上的身份验证是不够的(即在每个请求中将ClientID作为参数传递给WCF),我希望通过身份验证来保护我的后端(WCF),以便对指定角色的方法执行双重检查并具有PrincipalPermission 我确信来自两个提供商的标识名不会交叉(公共登录仅为数字,内部网类似于“域\登录”)。前端站点使用forms auth,其提供程序返回GenericPrincipal。intranet站点使用Win

有以下设计:后端实现为WCF、公共前端站点和两个intranet站点(三个站点都与后端通信)。我认为站点上的身份验证是不够的(即在每个请求中将ClientID作为参数传递给WCF),我希望通过身份验证来保护我的后端(WCF),以便对指定角色的方法执行双重检查并具有
PrincipalPermission

我确信来自两个提供商的标识名不会交叉(公共登录仅为数字,内部网类似于“域\登录”)。前端站点使用forms auth,其提供程序返回
GenericPrincipal
。intranet站点使用Windows auth,我已将
WindowsPrincipal
附加到
Page.User


是否可以将WCF配置为使用两个现成的成员资格提供程序(前台网站使用的自定义提供程序和Windows),而不编写另一个自定义代码?我的WCF的托管方式是否重要?目前是windows服务。我需要切换到IIS 7吗?

我不这么认为-您只能有一个会员资格提供商。但您可以有一个自定义提供程序,它可以根据提供的凭据对两个不同的存储进行身份验证。例如,它可以检查用户名是否类似于domain\login,然后针对active directory进行尝试,否则针对网站提供商进行尝试


另一个想法是为服务设置两个不同的端点。每个都将配置特定的提供程序。服务实现将保持不变——在内部,您必须使用基于声明的授权。查看本文了解更多信息:

优秀的文章,是迄今为止我读过的最好的文章!我不知道每个端点都可以配置为使用特定的提供者,所以您的想法对我来说是一个很好的解决方案。谢谢@UserControl,还有文章的第2部分,刚刚意识到第1部分没有链接。给你: