我对WCF比较陌生,想要了解在通过WCF公开其业务层操作的应用程序上实现身份验证的最佳(或最正确)方法的一些意见?
是否应该传递令牌,使用用户名/密码并每次验证......或者什么?
也欢迎任何链接。
答案 0 :(得分:2)
一个非常重要的安全考虑因素是WCF中的安全性在两个层面上起作用
邮件安全性
运输安全
使用传输层安全性来保护通信的良好做法,以及消息层将用户作为有效用户进行身份验证,并批准其权限。
如果将服务合同定义为
,则确定是否对每个呼叫进行身份验证我建议使用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基础结构检查角色权限。
帮助我实现目标的链接:
答案 3 :(得分:0)
我知道我使用的一个:它使用ASP.NET成员资格框架来对WCF进行身份验证。我目前正在尝试允许OpenID和其他提供程序进入系统,这使我重新考虑这种类型的身份验证的ASP.NET成员资格。
但是如果你控制自己的帐户,我会选择ASP.NET会员资格。