具有 basicHttpBinding、传输安全性和基本客户端凭据类型的自定义 WCF 凭据验证器
Posted
技术标签:
【中文标题】具有 basicHttpBinding、传输安全性和基本客户端凭据类型的自定义 WCF 凭据验证器【英文标题】:Custom WCF credential validator with basicHttpBinding, Transport security, and Basic client credential type 【发布时间】:2020-07-20 16:21:52 【问题描述】:我一直在阅读 WCF 配置文档,希望确认我遇到的限制。
我有一个需要以下绑定配置的客户端:
<bindings>
<basicHttpBinding>
<binding name="secureHttpBinding">
<security mode="Transport">
<transport clientCredentialType="Basic"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
在服务器端,我实现了一个自定义用户名和密码验证器,因为我们不为客户端使用 Windows 或域帐户。我遵循了本指南:https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-use-a-custom-user-name-and-password-validator,但他们和我见过的其他示例使用 wsHttpBinding 或添加消息安全性。
服务器端点和行为如下所示:
<services>
<service name="MyWcfService.Service" behaviorConfiguration="MyBehavior">
<endpoint
address=""
binding="basicHttpBinding"
bindingConfiguration="secureHttpBinding"
contract="MyWcfService.IService"/>
<endpoint
address="mex"
binding="mexHttpsBinding"
contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceCredentials>
<userNameAuthentication
userNamePasswordValidationMode="Custom"
customUserNamePasswordValidatorType="MyValidator, MyWcfService"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
在启用基本身份验证的 IIS 中托管服务时,未命中自定义验证器,IIS 会尝试针对 Windows 帐户验证提供的凭据,如果用户帐户不存在,则会失败并显示此消息:
HTTP 请求未经客户端身份验证方案“基本”授权。
那么,对于托管在 IIS 中的具有 basicHttpBinding、传输安全模式和基本传输客户端凭据类型的服务,是否不可能拥有自定义凭据验证器?有没有办法覆盖 IIS 所做的基本 Windows 身份验证?
【问题讨论】:
【参考方案1】:我们应该使用UserName
身份验证而不是基本身份验证,随后,我们可以为该服务使用自定义凭据验证器。
<basicHttpBinding>
<binding name="mybinding">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName"/>
</security>
</binding>
</basicHttpBinding>
<serviceCredentials>
<userNameAuthentication customUserNamePasswordValidatorType="WcfService3.CustUserNamePasswordVal,WcfService3" userNamePasswordValidationMode="Custom"/>
</serviceCredentials>
</behavior>
</serviceBehaviors>
</behaviors>
详情How to add user/pass authentication in WCF 如果有什么我可以帮忙的,请随时告诉我。
【讨论】:
当然,它是这样工作的,但我的问题是它是否可以使用 Basic。 据我所知,Basic authentication总是使用windows本地账户或AD账户对客户端进行认证。【参考方案2】:到目前为止,似乎无法在此绑定配置中使用自定义凭据验证器。
<basicHttpBinding>
<binding name="secureHttpBinding">
<security mode="Transport">
<transport clientCredentialType="Basic"/>
</security>
</binding>
【讨论】:
以上是关于具有 basicHttpBinding、传输安全性和基本客户端凭据类型的自定义 WCF 凭据验证器的主要内容,如果未能解决你的问题,请参考以下文章
WCF--找不到具有绑定 BasicHttpBinding 的终结点的与方案 https 匹配的基址。注册的基址方案是 [http]。
Visual Studio Mac Streaming BasicHttpBinding不起作用
WCF 与 basicHttpBinding、加密、签名和 usernameToken over HTTP
如何在 IIS 中将 WCF 与 basichttpbinding only 、 SSL 和 Basic Authentication 一起使用?