【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
|
不可使用 |