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

3

我正在计划一个跨多台机器的分布式应用程序设置,并将使用WCF在它们之间发送数据。

机器A

机器B

机器C

机器B和机器C上的WCF服务应检查来自机器A的请求是否已经得到验证。如何检查跨不同机器的请求是否已经得到验证?

我只关心请求是否已经得到验证,而不关心保护消息体(因为我们没有在网络上传输任何敏感数据),因此不需要SSL。

以上情况下可以使用哪些身份验证方法?

2个回答

5
这取决于你的解决方案需要多复杂和安全。WCF也可以基于成员资格提供程序验证用户。这种情况需要您将用户凭据传递到每个WCF服务调用中,并最终在每个层上重新对用户进行身份验证。这不起作用,因为Web应用程序仅针对一个请求使用凭据,而随后的请求具有cookie中的身份验证令牌。但是WCF需要验证每个调用。因此,在WCF中使用成员资格提供程序时,您需要在Machine A的会话中存储用户凭据。我真的不喜欢在整个会话期间在某个位置存储客户端凭据的想法。
我可能会使用像以下这样的东西:
低安全性情况:
您提到正在构建分布式应用程序,因此您的各层之间(A-C机器)应该有一定的信任。在机器A上允许匿名访问吗?如果不是,那么机器B上的层是否可以信任机器A上的层已经对用户进行了身份验证?C和B也是同样的情况吗?在这种情况下,您根本不需要处理机器B和C上的身份验证,而可以使用Windows安全性来仅允许访问运行客户端层的账户(A是B的客户端,B是C的客户端)。
高安全性情况:
这通常用于避免某人入侵Machine A上的Web并在此情况下对Machine B上的所有操作进行身份验证,或者当您需要基于用户的原始身份进行授权时。
您不会在Machine A上执行直接身份验证。相反,Machine A上的自定义成员资格提供程序(或直接表单身份验证)将调用Machine B上的身份验证服务。该服务将为“安全会话”创建令牌。根据实现,此令牌仅可用于A和B之间的通信(您必须将其存储在会话中)或整个客户端、A和B之间的通信(您将在cookie中传递它)。机器C相信机器B。这可以进一步扩展为完整的联合方案。
这将无法防止会话劫持(在客户端和Machine A之间嗅探带有令牌的cookie-为了避免这种情况,您需要在客户端和A之间使用HTTPS),但没有令牌,黑客可以在您的Machine B或C上执行任何操作。

0
一个典型的设置是,机器A使用单个技术用户连接到机器B和C上的WCF服务。为此,可以将用户名和密码放在机器A的配置文件中,或者如果所有机器都在同一域中,则可以使用Windows身份验证。
机器B和C将简单地信任机器A已经通过身份验证的请求。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接