【发布时间】:2009-12-14 03:47:44
【问题描述】:
我对 WCF 比较陌生,想了解在通过 WCF 公开其业务层操作的应用程序上实现身份验证的最佳(或最正确)方法是什么?
是否应该传递一个令牌,加密用户名/密码并每次验证......还是什么?
任何链接都将不胜感激。
【问题讨论】:
标签: wcf security authentication wcf-security
我对 WCF 比较陌生,想了解在通过 WCF 公开其业务层操作的应用程序上实现身份验证的最佳(或最正确)方法是什么?
是否应该传递一个令牌,加密用户名/密码并每次验证......还是什么?
任何链接都将不胜感激。
【问题讨论】:
标签: wcf security authentication wcf-security
一个非常重要的安全考虑是 WCF 中的安全工作在两个级别上
消息安全
运输安全
使用传输层安全性来保护一般通信,并使用消息层将用户验证为有效用户并批准他的权限是一种很好的做法。
如果服务合同被定义为
我建议使用 PerCall 作为对硬件资源的最有效利用,但这在很大程度上取决于您的情况。
【讨论】:
WCF 提供了许多用于身份验证和后续授权的机制。
至于身份验证:如果您在 LAN 中的公司防火墙后面,使用直接的 Windows 凭据是最简单的 - 无需记住和发送混乱的用户名/密码,它开箱即用。这可以与针对 Windows 组成员系统的授权检查相结合,例如只允许某些用户组执行操作。
如果您正在寻找面向互联网的服务,您可以选择用户名/密码方案或证书。可以对照 ASP.NET 2.0 为我们带来的 ASP.NET 成员系统检查标准用户名/密码方案,用于身份验证(成员资格)和授权(角色提供者)。
如果您要与非常有限的一组外部用户打交道,例如,证书非常有用。商业伙伴等。证书必须“带外”交付给客户端,例如以其他方式,通过磁盘或其他方式。但是一旦安装,就可以无缝使用和验证。
Juval Lowy(“Programming WCF Services”的作者)在 MSDN 上的 Declarative WCF Security 上有一篇很棒的文章,他在其中重点介绍了他的五个安全方案,以及如何使用和保护它们,他甚至为 WCF 提供了一个声明性扩展,以只需将属性应用于您的服务合同即可做到这一点 - 非常聪明!
【讨论】:
我最近为一些媒体预览服务实现了一个相当大的 WCF 服务层。由于我们将其暴露在互联网上,因此 Windows 身份验证不是一种选择。由于我们已经有一个现有的用户/角色系统,我们也决定不使用 ASP.NET 成员资格提供程序。
我最终实现了一个自定义身份验证/授权模块并使用 SSL 作为传输层安全元素。使用 WCF 属性,我可以使用标准 WCF 基础结构检查角色权限。
帮助我实现目标的链接:
【讨论】:
我知道我使用的一个:它使用 ASP.NET 成员框架来使用 WCF 进行身份验证。我目前正在尝试允许 OpenID 和其他提供程序进入系统,这让我重新考虑了这种身份验证的 ASP.NET 成员资格。
但如果您要控制自己的帐户,我会选择 ASP.NET 成员资格。
【讨论】: