完整 .NET 和 .NET Core 之间的 WCF 基本身份验证

Posted

技术标签:

【中文标题】完整 .NET 和 .NET Core 之间的 WCF 基本身份验证【英文标题】:WCF Basic authentication between Full .NET and .NET Core 【发布时间】:2019-01-28 21:40:17 【问题描述】:

我想通过基本身份验证在 .NET 核心应用程序和完整的 .NET Web 服务(托管在 IIS 中)之间建立 WCF https 连接。

在 .NET Core 方面,我有一个 ChannelFactory 设置如下:

var binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;

factory = new ChannelFactory<T>(binding, new EndpointAddress(endpointAddress));
factory.Credentials.UserName.UserName = "abc";
factory.Credentials.UserName.Password = "xyz";

在 web 服务上,我有一个使用这样配置的绑定的端点:

<basicHttpBinding>
    <binding name="BasicHttpBinding" maxReceivedMessageSize="10485760">
      <security mode="Transport">
        <transport clientCredentialType="Basic" proxyCredentialType="None" realm=""/>
      </security>
    </binding>
  </basicHttpBinding>

但在运行时我收到此错误消息:

System.ServiceModel.Security.MessageSecurityException: 'HTTP 请求未经客户端身份验证方案'Basic' 的授权。从服务器收到的身份验证标头是'Basic realm="localhost"'。'

我希望双方都说身份验证方案“基本”,并且可以毫无问题地连接。 我不知道领域是从哪里来的,但我无法摆脱它。我认为这是造成问题的原因。

【问题讨论】:

确保您的密码正确,当凭据出现问题时可能会出现此问题。 看来我什至没有达到这一点。未调用服务器端自定义 UsernamePasswordValidator。 查看这个答案***.com/a/52696777/5077196 【参考方案1】:

您已经设置了基本的凭证类型,那么您应该使用 HTTPS , https://localhost/....

【讨论】:

以上是关于完整 .NET 和 .NET Core 之间的 WCF 基本身份验证的主要内容,如果未能解决你的问题,请参考以下文章

.NET开发技能:容器化ASP.NET Core?

无法从完整的 .NET 项目项目引用 .NET Core 类库

.NET Core 和 Xamarin 中的 RPC

面向具有 EF6 和 Identity 的完整框架的 ASP.NET Core

System.Web 可以与具有完整框架的 ASP.Net Core 一起使用吗

.Net Core 2.0 appsettings 与 .net 完整框架使用 ConfigurationManager