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

在企业体系结构的WCF服务中实现身份验证的最佳方法是什么?,wcf,security,authentication,wcf-security,Wcf,Security,Authentication,Wcf Security,我对WCF比较陌生,想了解一些关于在通过WCF公开其业务层操作的应用程序上实现身份验证的最佳(或最正确)方法的意见 每次都应该传递、加密用户名/密码并验证令牌……还是什么 另外,任何链接都将不胜感激。我知道我使用的一个链接:它使用ASP.NET成员资格框架与WCF进行身份验证。我目前正在尝试允许OpenID和其他提供商进入系统,这使我重新考虑这种身份验证的ASP.NET成员资格 但是,如果您控制自己的帐户,我会选择ASP.NET成员身份。WCF提供了许多身份验证和后续授权机制 至于身份验证:如果

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

每次都应该传递、加密用户名/密码并验证令牌……还是什么


另外,任何链接都将不胜感激。

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


但是,如果您控制自己的帐户,我会选择ASP.NET成员身份。

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

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

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

如果您与非常有限的外部用户(例如业务合作伙伴等)打交道,证书是非常好的。证书必须“带外”交付给客户端,例如通过磁盘或其他方式。但一旦安装,它的无缝使用和验证


Juval Lowy(《为WCF服务编程》)有一篇关于MSDN的优秀文章,他在文章中重点介绍了他的五种安全场景,以及如何使用和保护它们,他甚至还为WCF提供了一个声明性扩展,只需将一个属性应用到您的服务契约中即可做到这一点——非常聪明

一个非常重要的安全考虑是WCF中的安全性在两个级别上工作

消息安全

  • 用户名/密码
  • 代币
  • Windows凭据
  • 客户端证书
  • 等等
运输安全

  • 服务证书
  • 等等(我真的不知道其他原因,因为我只使用了1)
通常,使用传输层安全性来保护通信,使用消息层将用户验证为有效用户,并批准其权限,这是一种很好的做法

如果服务合约定义为

  • 独生子女
  • 珀尔塞维特
  • 珀索尔

我建议使用PerCall作为最有效的硬件资源使用,但这在很大程度上取决于您的情况

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

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

帮助我实现目标的链接: