【WCF】WCF配置的行为安全策略对客户端的影响

注:下表仅为本地调试的结果。实际上服务器上时,IIS的 Basic Auth 和 TransportWithMessageCredential 无法共用,只能取  Basic Auth + Tranport 或者 Anonymous + TransportWithMessageCredential 其一

服务端

假设有customUserNamePasswordValidator并且message clientCredentialType="UserName"

客户端

行为

备注

N/A

security mode="TransportWithMessageCredential"

代码里未填写client.ClientCredentials.UserName.UserName

客户端会直接报错,根本不发起请求

不可使用

N/A

security mode="TransportWithMessageCredential

.net客户端不使用Https

客户端报告Schema错误,不发起请求

不可使用

<security mode="TransportWithMessageCredential">

         

security mode="Transport"

服务端WCF框架直接抛出异常

FaultException - InvalidSecurity

根本不进入customUserNamePasswordValidator

不可使用

<security mode="TransportWithMessageCredential">

security mode="TransportWithMessageCredential"

服务端进入customUserNamePasswordValidator

进行验证,如果验证出错,返回FaultCode=InvalidSecurityToken

效果:customUserNamePasswordValidator

可与IIS的Auth=Basic搭配使用

服务端使用

ServiceSecurityContext.Current.PrimaryIdentity.Name来获取ClientCredentials

<security mode="Transport">

(仅当IIS Auth=None时可运行,若Auth=Basic会在服务端报错)

security mode="TransportWithMessageCredential"

服务端忽略customUserNamePasswordValidator

效果:启用Https,但是无任何帐号验证

<security mode="Transport">

(仅当IIS Auth=None时可运行,若Auth=Basic会在服务端报错)

security mode="Transport"

服务端忽略customUserNamePasswordValidator

效果:启用Https,但是无任何帐号验证

Security mode 无关

<transport clientCredentialType="Basic"/>

服务器端IIS关闭Anonymous并开启Basic验证

<security mode="Transport">

<transport clientCredentialType="Basic"/>

</security>

ClientCredentials必填,否则客户端不发起请求

请求发起后,若有填写则使用Header Authorization Basic进行验证,无填写或验证不成功则使用ClientCredentials计算后当作 Basic进行验证。均失败后,将IIS返回的401异常抛出。服务端不进入WCF

仅测试用,无生产意义

Security mode 无关

<transport clientCredentialType="Basic"/>

服务器端IIS关闭Anonymous并开启Basic验证

<security mode="TransportWithMessageCredential">

<transport clientCredentialType="Basic"/>

</security>

ClientCredentials必填,否则客户端不发起请求

请求发起后,则使用Header Authorization Basic进行请求(不填写亦会进行请求),失败后直接将IIS返回的401异常抛出。服务端不进入WCF

仅测试用,无生产意义

Security mode 无关

IIS关闭Anonymous并开启Basic验证但是WCF配置中未开启<transport clientCredentialType="Basic"/>

Any

IIS首先进行Basic验证,不通过抛出401,通过后抛出500错误:The authentication schemes configured on the host ('Basic') do not allow those configured on the binding 'BasicHttpBinding' ('Anonymous')

不可使用

<security mode="Transport">

<security mode="TransportWithMessageCredential">

.net客户端Security mode="none"

或使用SoapUI

发起Http而非Https请求

服务器会报告404

不可使用

原文地址:https://www.cnblogs.com/lionetchen/p/13424538.html