【问题标题】:The HTTP request is unauthorized with client authentication scheme 'Anonymous'.HTTP 请求未经客户端身份验证方案“匿名”授权。
【发布时间】:2018-01-31 12:55:41
【问题描述】:

我正在尝试连接到使用 https 托管的 wcf 服务

我将正确的凭据传递给服务器

enter code here   var channel = new ConfigurationChannelFactory<C>(serviceConfigName, pluginConfig, new EndpointAddress(Url));
        if (!string.IsNullOrEmpty(UserName))
        {
            channel.Credentials.UserName.UserName = UserName;
            channel.Credentials.UserName.Password = Password;
            channel.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
        }
        return channel; 

我使用了下面的配置

<configuration>
  <system.serviceModel>
    <client>
      <endpoint
          name="ms_basic_http"
          address="http://localhost"
          binding="basicHttpBinding"
          bindingConfiguration="defaultBasicHttpsBinding"
          contract="ICONTRACT" />
    </client>
    <bindings>
      <basicHttpBinding >
        <binding name="defaultBasicHttpsBinding">
          <security mode="Message">
            <transport clientCredentialType="Basic" realm="BS"   />
            <message clientCredentialType="UserName"  />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
  </system.serviceModel>
</configuration>

但从服务器获得以下响应

HTTP 请求未经客户端身份验证方案“匿名”授权。从服务器收到的身份验证标头是 'Basic realm="BS'

【问题讨论】:

    标签: wcf wcf-security


    【解决方案1】:

    当我将配置更改为

    <configuration>
      <system.serviceModel>
        <client>
          <endpoint
              name="ms_basic_http"
              address="http://localhost"
              binding="basicHttpBinding"
              bindingConfiguration="defaultBasicHttpsBinding"
              contract="contract" />
        </client>
        <bindings>
          <basicHttpBinding >
            <binding name="defaultBasicHttpsBinding">
              <security mode="Transport">
                <transport clientCredentialType="Basic" proxyCredentialType="None" realm="BS" />
                
              </security>
            </binding>
          </basicHttpBinding>
        </bindings>
      </system.serviceModel>
    </configuration>
    我有 HTTP 请求未经客户端身份验证方案“基本”授权。从服务器收到的身份验证标头是“Basic realm="BS"”。

    【讨论】:

      【解决方案2】:

      将安全配置更改为:

      <bindings>
        <basicHttpBinding >
          <binding name="defaultBasicHttpsBinding">
            <security mode="Transport"> //or none
              <transport clientCredentialType="None" proxyCredentialType="None" realm="" />
              <message clientCredentialType="UserName" algorithmSuite="Default" />
            </security>
          </binding>
        </basicHttpBinding>
      </bindings>
      

      【讨论】:

      • 返回 HTTP 请求未经授权,使用客户端身份验证方案“匿名”。从服务器收到的身份验证标头是 'Basic realm="BS'
      • 你是否也添加了这两行
      • 是的,但是我收到的请求在客户端身份验证方案“匿名”的情况下是未经授权的。但是如果我打开 lientCredentialType="Basic" 它会更改为使用客户端身份验证方案“Basic”获得 HTTP 请求未经授权。从服务器收到的身份验证标头是 'Basic realm="BS"'。
      • 所以尝试使用
      • 同样的问题,服务器需要基本认证
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-27
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      相关资源
      最近更新 更多