在企业体系结构上的WCF服务中实现身份验证的最佳方法是什么?

时间:2009-12-14 03:47:45

标签: wcf security authentication wcf-security

我对WCF比较陌生,想要了解在通过WCF公开其业务层操作的应用程序上实现身份验证的最佳(或最正确)方法的一些意见?

是否应该传递令牌,使用用户名/密码并每次验证......或者什么?

也欢迎任何链接。

4 个答案:

答案 0 :(得分:2)

一个非常重要的安全考虑因素是WCF中的安全性在两个层面上起作用

邮件安全性

  • 用户名/密码
  • 令牌
  • Windows凭据
  • 客户证书

运输安全

  • 服务证书
  • 等。 (我真的不知道其他cos ive只用过1)

使用传输层安全性来保护通信的良好做法,以及消息层将用户作为有效用户进行身份验证,并批准其权限。

如果将服务合同定义为

,则确定是否对每个呼叫进行身份验证
  • 的Singleton
  • PerService
  • PerCall

我建议使用PerCall作为最有效的硬件资源使用,但这取决于您的具体情况。

答案 1 :(得分:1)

WCF提供了许多身份验证和后续授权机制。

至于身份验证:如果你在局域网中的公司防火墙后面,使用直接的Windows凭据是最简单的 - 没有杂乱的用户名/密码记住和发送,它只是开箱即用。这可以与针对Windows组成员系统的授权检查相结合,例如,只允许某些用户组执行操作。

如果您正在寻找面向互联网的服务,您可以选择用户名/密码方案或证书。可以根据ASP.NET 2.0为我们带来的ASP.NET成员资格系统检查标准用户名/密码方案,包括身份验证(成员资格)和授权(角色提供程序)。

如果您处理的是非常有限的一组外部用户,证书很有用,例如:商业伙伴等。证书必须“带外”发送给客户,例如在某种程度上,通过磁盘或其他东西。但是一旦安装,它就可以无缝使用和验证。

Juval Lowy(“编程WCF服务”一书的作者)在Declarative WCF Security上有一篇关于MSDN的精彩文章,其中他强调了他的五个安全场景,如何使用和保护它们,他甚至还有一个声明性扩展WCF通过仅将属性应用于服务合同来实现这一点 - 非常简单!

答案 2 :(得分:1)

我最近为某些媒体预览服务实现了一个相当大的WCF服务层。由于我们将其暴露在互联网上,因此Windows身份验证不是一种选择。由于我们已经拥有现有的用户/角色系统,我们还决定不使用ASP.NET成员资格提供程序。

我最终实现了自定义身份验证/授权模块,并使用SSL作为传输层安全元素。使用WCF属性,我可以使用标准WCF基础结构检查角色权限。

帮助我实现目标的链接:

http://blogs.msdn.com/pedram/archive/2007/10/05/wcf-authentication-custom-username-and-password-validator.aspx

http://www.leastprivilege.com/CustomPrincipalsAndWCF.aspx

http://www.samuelotter.com/node/7

答案 3 :(得分:0)

我知道我使用的一个:它使用ASP.NET成员资格框架来对WCF进行身份验证。我目前正在尝试允许OpenID和其他提供程序进入系统,这使我重新考虑这种类型的身份验证的ASP.NET成员资格。

但是如果你控制自己的帐户,我会选择ASP.NET会员资格。