• 【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

    不可使用

  • 相关阅读:
    C语言的AES加密
    curl指定域名的IP
    gdb调试知识
    C++获取寄存器eip的值
    C++嵌入lua
    [置顶] python字典和nametuple互相转换例子
    【python】redis基本命令和基本用法详解
    xshell登录到CentOS7上时出现“The remote SSH server rejected X11 forwarding request.
    selinue引起的ssh连接错误
    SCP和SFTP相同点和区别
  • 原文地址:https://www.cnblogs.com/lionetchen/p/13424538.html
Copyright © 2020-2023  润新知