使用basicHttpBinding时的WCF和UserName凭据

时间:2012-01-11 09:37:50

标签: wcf authentication

据我所知,为了使用带有basicHttpBinding的UserName凭据对SQL Server成员资格提供程序进行身份验证,我需要设置TransportWithMessageCredentials安全模式。但最近我看了WCF Security guide。在本书中,我找到了类似的示例,但是使用了基本模式而不是TransportWithMessageCredentials,并创建了一个自定义HTTP模块来验证用户。

我想知道哪种方法值得使用?

1 个答案:

答案 0 :(得分:3)

两种方法都是一样的,但它们使用不同的方法。第一种方法使用SOAP头传递凭证,而第二种方法使用HTTP头传递凭证。

第二种方法涉及额外的网络往返(由WCF内部处理),因为第一次呼叫被拒绝,具有401状态代码并且需要基本认证,并且只有第二次呼叫包含具有凭证的报头。这是HTTP身份验证的工作方式,客户端不应该发送凭据,直到服务器需要它们(即使有可能预先验证,但我认为WCF不使用它)。第二种方法不能与流传输模式一起使用。

这两种方法之间可能还有一个区别。第一种方法验证每个调用,而第二种方法验证连接,因此如果您从同一代理(和相同的连接)多次调用服务,您将只使用第二种方法进行一次身份验证,但对于使用第一种方法的每次调用。

编辑:

这两者之间没有偏好。您将使用更适合您需求的那个。如果您可以控制客户端和服务器,或者您知道客户端将使用更强大的SOAP堆栈,则第一个更容易设置。如果您无法控制客户端并且他们可以使用不同的平台,那么您可以找到第二个可互操作的平台。

作为旁注,第一个仅适用于SOAP协议,而第二个适用于SOAP,POX和REST(POX和REST需要不同的绑定)。