如何对每个WCF调用进行身份验证和授权?

8

我有一个使用IIS托管的WCF服务的WPF客户端。对于身份验证,我考虑使用证书或用户名进行身份验证。客户端调用WCF中的几个方法并传递一些消息。

  1. 对于每个到达WCF的调用,我希望验证用户身份。
  2. 为了将消息放入数据库中,我必须知道调用者是谁,他们的用户名以及关于用户的其他一些属性。如何在每个调用中传递这些信息[可能是一个小对象]?
1个回答

10

这是推荐的默认行为-每次调用WCF服务都会获得一个新的服务实例,并且每个调用都经过身份验证和授权。

只需确保不启用WCF中的会话模式,也不要使用WCF单例。

只需保持常规的标准“每次调用”WCF服务-没有问题。

如果您在企业局域网上,还可以考虑使用Windows凭据进行身份验证(这是wsHttpBindingnetTcpBinding的默认设置)。

有一个非常详尽的 WCF安全指南,其中包含大量有关如何设置某些WCF安全场景的示例和操作指南。

我还建议您查看 WCF安全基础,以便对WCF及其安全机制有一个很好的介绍。

更加高级的概念是声明 WCF 安全性,Juval Lowy 在其中介绍了五种安全场景(值得一读!),并将它们封装到可应用于您的服务协定的安全性属性中。


1
这正是我所做的,而且它运行得非常好。在这里的一个建议是确保验证用户的代码非常快速(因为它会在每次服务调用时被调用)。如果对于此操作持久存储的调用有一定的开销,你可能需要考虑使用缓存。 - RQDQ
谢谢,我一直在阅读WCF安全指南,接下来我还会阅读另外两篇文章。您提到了每次调用实例管理,那么我该如何在每次调用时发送用户信息对象呢? - iraSenthil
1
@iraSenthil:如果您正在使用Windows凭据,则根本不需要做任何事情。如果您正在使用证书,则需要在配置中指定证书(并且在代码中不需要做任何事情)。如果您想使用单独的用户名/密码,则必须在打开通信通道时设置这些内容。 - marc_s

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