为什么wcf不允许没有http模块,通过传输安全模式进行用户名/密码validation

我想使用带有用户名/密码身份validation和ssl的传输安全模式,它适用于Windows身份validation:

 

我在msdn上发现了一篇文章解释了如何使用传输安全模式进行用户名/密码身份validation,但需要自定义http模块。 我感兴趣的是为什么没有默认的安全模式,如:

  

如果我需要用户名/密码validation,我可以使用消息安全模式,但如果所有站点都使用https / ssl进行身份validation,那么在wcf中这样做应该不会有问题。
提前致谢。

问题是错误的。 WCF允许使用传输安全性和自定义用户名/密码validation。 传输安全模式对给定的传输协议使用标准化身份validation模式,HTTP没有任何标准化的“UserName”身份validation模式。 它具有称为基本身份validation的等效模式

    

默认情况下, Basic身份validation需要Windows帐户,但您可以使用自定义UserNamePasswordValidator切换validation。 问题是这只适用于自托管服务。 在IIS中托管服务时它不起作用。 这就是错误地提出这个问题的原因。 问题不在WCF中,而是在IIS中。

在IIS中托管服务时,它负责身份validation和身份validation。 IIS中基本身份validation的默认模块仅支持Windows帐户。 这就是为什么你需要自定义模块来使用非Windows帐户的原因。

正如@Marc在评论中提到的,您还可以使用TransportWithMessageCredential安全模式:

    

在此方案中,不对传输协议执行身份validation。 它是消息的一部分(它使用WS-Security的UserNameToken配置文件标准)。 您可以再次使用自定义UserNamePasswordValidator ,这次它适用于自托管和IIS托管的SOAP服务(SOAP是强制性要求)。