如何验证和授权每个 WCF 调用?

Posted

技术标签:

【中文标题】如何验证和授权每个 WCF 调用?【英文标题】:How to Authenticate and Authorize every WCF call? 【发布时间】:2011-06-29 06:20:29 【问题描述】:

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

    对于 WCF 的每个调用,我 想要对用户进行身份验证。 要将消息放入数据库,我必须知道谁是调用者,他们的用户名是什么以及有关用户的其他一些属性。如何在每次调用时传递这些信息[可能是一个小对象]?

【问题讨论】:

【参考方案1】:

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

请确保不要在 WCF 中启用会话模式等功能,并且不要走 WCF 单例的路径。

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

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

有一个非常广泛的WCF Security Guide,其中包含大量示例以及如何设置某些 WCF 安全方案的操作指南。

我还建议您查看The Fundamentals of WCF Security,了解 WCF 及其安全机制的精彩介绍。

更高级的是Declarate WCF Security 的想法,其中 Juval Lowy 介绍了五个安全场景(非常值得一读!)并将它们封装到安全属性中以应用于您的服务合同。

【讨论】:

这正是我所做的,它就像一个冠军。这里的建议是确保验证用户的代码非常快(因为每次服务调用都会调用它)。如果为此调用持久性存储的成本很高,您可能需要查看缓存。 谢谢,我一直在看WCF安全指南,我准备看另外两篇文章。您谈到了每次调用实例管理,如何在每次调用时发送用户信息对象? @iraSenthil:如果您使用的是 Windows 凭据,则根本不需要做任何事情。如果您使用的是证书,则需要在配置中指定证书(并且在代码中不执行任何操作)。如果您想使用单独的用户名/密码,则必须在打开通信通道时进行设置。

以上是关于如何验证和授权每个 WCF 调用?的主要内容,如果未能解决你的问题,请参考以下文章

WCF授权策略详解

WCF Rest 自托管证书安全服务返回 401 未经授权

RestSharp - 授权标头未涉及 WCF REST 服务

什么是 WPF 和 WCF 应用程序的用户身份验证/授权的“最佳实践”?

WCF-TransportWithMessageCredential HTTP 请求未经授权,客户端身份验证方案“匿名”

WCF,将数据传递给服务类的自定义授权