如何使用表单身份验证和安全性来验证WCF调用

Fix*_*xer 3 security wcf wcf-security

我正计划为跨越多台计算机的分布式应用程序进行设置,并使用WCF在其间发送数据.

机器A.

机器B.

机器C.

机器B和机器C上的WCF服务应检查来自机器A的请求是否已经过身份验证.如何检查请求是否在不同的计算机上进行了身份验证?

我只关心请求是否经过身份验证,而不关心保护邮件正文(因为我们没有通过网络发送任何敏感数据),因此不需要SSL.

我可以使用哪些身份验证方法进行上述方案?

Lad*_*nka 5

这取决于您的解决方案应该是多么复杂和安全.WCF还可以基于成员资格提供程序验证用户.此类方案要求您将用户凭据传递给每个WCF服务调用,最后您将再次对每个层上的用户进行身份验证.这不起作用,因为Web应用程序仅对一个请求使用凭据,后续请求在cookie中具有身份验证令牌.但是WCF要求对每个呼叫进行身份验证.因此,当在WCF中使用成员资格提供程序时,您需要在计算机A上的会话中存储用户凭据.我真的不喜欢将内存中的客户端凭据存储在整个会话中的想法.

我可能会使用类似的东西:

安全性低的情况:

您提到您正在构建分布式应用程序,因此您的层之间应该存在某种信任(机器A - C).机器A是否允许匿名访问?如果没有,您的机器B上的层是否可以在机器A上信任其认证用户的层?与C和B相同?在这种情况下,你不需要处理所有的机器B和C认证,而是使用Windows安全性只允许访问帐户下运行的客户端层(A是B的客户,B是C的客户端).

高安全性方案:

当您想要避免某人在机器A上攻击Web并且在这种情况下对机器B上的所有操作进行身份验证或者您需要基于用户原始身份的授权时,通常会使用此方法.

您不会在计算机A上执行直接身份验证.而是计算机A上的自定义成员资格提供程序(或直接表单身份验证)将在计算机B上调用身份验证服务.该服务将为"安全会话"创建令牌.根据实现,此令牌只能用于A和B之间的通信(您必须将其存储在会话中)或用于客户端A和B之间的整个通信(您将在cookie中传递它).机器C信任机器B.这可以进一步扩展到完整的联合方案.

这不会避免会话劫持(在客户端和机器A之间使用令牌嗅探cookie - 为了避免在客户端和A之间需要HTTPS)但是没有令牌,黑客可以在您的机器B或C上执行任何操作.