【发布时间】:2010-09-06 05:40:08
【问题描述】:
通过 WCF 实现身份验证的最佳方式是什么?
我宁愿不使用 WS-*,因为它需要独立于传输。
我应该“自己动手”吗?是否有任何指导(文章/博客文章)?
或者有没有办法(我应该)在服务器端使用内置的 ASP.NET Membership 和 Profile 提供程序?
【问题讨论】:
标签: .net asp.net wcf authentication membership
通过 WCF 实现身份验证的最佳方式是什么?
我宁愿不使用 WS-*,因为它需要独立于传输。
我应该“自己动手”吗?是否有任何指导(文章/博客文章)?
或者有没有办法(我应该)在服务器端使用内置的 ASP.NET Membership 和 Profile 提供程序?
【问题讨论】:
标签: .net asp.net wcf authentication membership
为什么 WS-* 应该依赖于传输?
WS-* 规范的全部意义在于它们是消息的一部分,因此独立于传输。
【讨论】:
WS-* 与传输无关。这就是重点。
身份验证实际上取决于您的服务所需的消费者是谁。不要因为不需要的安全性而加重内部服务的负担,同样,如果您需要了解有关第三方用户的特定信息,添加额外的安全层也很有用。
对于外部 API,我们使用证书进行 WS-* 身份验证,然后使用简单的身份验证机制(提供用户名和密码,返回 GUID 身份验证令牌,事后为所有请求提供令牌)。
【讨论】:
感谢您的回答。
我的意思不是依赖于运输,我的错误。我的意思是我希望消费者能够选择绑定到哪个端点。而且由于 basicHttpBinding 和 netTcpBinding 等不支持 WS-*,我需要在服务级别使用一些东西。
Davids 简单的身份验证是我一直试图避免的。理想情况下,我想要一种方法来完成相同的事情,而不必为我的所有操作合约添加令牌参数。
【讨论】:
基于消息的身份验证,它是基于 WS-Security 的,是您正在寻找的,并且肯定受到 basicHttpBinding 和 netTcpBinding 的支持。我认为您错误地假设只有 WsHttpBinding 将支持 WS-Security,这是不准确的。
WS 绑定适用于 WS-Security 以外的 WS-* 元素,例如 WS-ReliableMessaging。如果您希望它保持安全,那么设置独立于传输的消息安全性仍然很棘手。对于非双工传输,您需要提前至少交换一个证书。
这可能是您认为 basicHttpBinding 不支持消息安全的另一个原因。 basicHttpBinding 不允许您在没有传输安全性的情况下使用 UserName 身份验证(出于充分的理由,我也会添加)。而且由于传输安全性本质上是依赖于传输的,我猜您正在尝试避免它。
因此,无论如何,如果您想完全独立于传输,您需要解决的第一件事就是按顺序获取证书并弄清楚您将如何分发第一个(根)证书,或安全地交换证书。如果您有一个可以分发主证书的应用程序,那么请走这条路。如果您处于比这更复杂的场景中,您需要退后一步,想想这个问题到底有多难。
【讨论】:
如果您要公开需要用户级别身份验证/授权的外部服务,我建议使用 ASP.NET 提供程序。
有一个有用的实用程序here 允许远程管理 ASP.NET 提供程序。 ASP.NET 解决方案确实需要 SQL...
【讨论】: