繁体   English   中英

为什么WCF在没有HTTP模块的情况下不允许通过传输安全模式进行用户名/密码身份验证

[英]Why wcf doesn't allow without a http module, username/password authentication through Transport security mode

我想使用带有用户名/密码身份验证和ssl的传输安全模式,在Windows身份验证中可以正常使用:

<transport clientCredentialType="Windows"/>

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

<transport clientCredentialType="Username"/>

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

这个问题被错误地问了。 WCF允许使用具有自定义用户名/密码验证的传输安全性。 传输安全模式针对给定的传输协议使用标准化的身份验证模式,并且HTTP没有任何标准化的“ UserName”身份验证模式。 它具有称为基本身份验证的等效模式:

<security mode="Transport">
  <transport clientCredentialType="Basic" />
</security>

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

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

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

<security mode="TransportWithMessageCredential">
  <message clientCredentialType="UserName" />
</security>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM