首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在BasicHttpBinding中的WCF服务中进行身份验证?

在BasicHttpBinding中的WCF服务中进行身份验证,可以使用以下方法:

  1. 使用用户名和密码进行身份验证:

在客户端代理类中,设置用户名和密码,并在服务端配置身份验证。

客户端代码:

代码语言:csharp
复制
BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic;

EndpointAddress endpointAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/Service");

ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>(binding, endpointAddress);
channelFactory.Credentials.UserName.UserName = "username";
channelFactory.Credentials.UserName.Password = "password";

ICalculator client = channelFactory.CreateChannel();

服务端配置:

代码语言:xml<system.serviceModel>
复制
  <bindings>
   <basicHttpBinding>
     <binding name="secureBinding">
       <security mode="TransportCredentialOnly">
         <transport clientCredentialType="Basic" />
        </security>
      </binding>
    </basicHttpBinding>
  </bindings>
 <services>
   <service name="MyService">
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="secureBinding" contract="ICalculator" />
    </service>
  </services>
  <behaviors>
   <serviceBehaviors>
      <behavior>
       <serviceCredentials>
          <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="MyNamespace.CustomUserNameValidator, MyAssembly" />
        </serviceCredentials>
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>
  1. 使用证书进行身份验证:

在客户端代理类中,设置证书,并在服务端配置身份验证。

客户端代码:

代码语言:csharp
复制
BasicHttpBinding binding = new BasicHttpBinding();
binding.Security.Mode = BasicHttpSecurityMode.Transport;
binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Certificate;

EndpointAddress endpointAddress = new EndpointAddress("http://localhost:8000/ServiceModelSamples/Service");

ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>(binding, endpointAddress);
channelFactory.Credentials.ClientCertificate.SetCertificate(StoreLocation.CurrentUser, StoreName.My, X509FindType.FindBySubjectName, "client.com");

ICalculator client = channelFactory.CreateChannel();

服务端配置:

代码语言:xml<system.serviceModel>
复制
  <bindings>
   <basicHttpBinding>
     <binding name="secureBinding">
       <security mode="Transport">
         <transport clientCredentialType="Certificate" />
        </security>
      </binding>
    </basicHttpBinding>
  </bindings>
 <services>
   <service name="MyService">
     <endpoint address="" binding="basicHttpBinding" bindingConfiguration="secureBinding" contract="ICalculator" />
    </service>
  </services>
  <behaviors>
   <serviceBehaviors>
      <behavior>
       <serviceCredentials>
         <serviceCertificate findValue="MyServiceCertificate" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName" />
         <clientCertificate>
           <authentication certificateValidationMode="PeerOrChainTrust" />
          </clientCertificate>
        </serviceCredentials>
      </behavior>
    </serviceBehaviors>
  </behaviors>
</system.serviceModel>

这样,就可以在BasicHttpBinding中的WCF服务中进行身份验证了。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • CoreWCF 1.0.0 发布,微软正式支持WCF

    2022年4月28日,我们达到了一个重要的里程碑,并发布了CoreWCF的1.0.0版本。对Matt Connew (微软WCF团队成员)来说,这是5年前即 2017年1月开始的漫长旅程的结束。Matt Connew 用3 周的时间来构建一个基于 .NET Core 的 WCF 服务实现的POC 基本原型。在3周结束时,Matt Connew 有了一个可以工作的玩具,可以使用BasicHttpBinding托管服务。然后,Matt Connew 的原型作为概念证明坐在那里收集灰尘,同时决定如何处理它。.NET团队在2019年的Build 大会上 已经决定了不在继续在.NET Core中支持WCF,这也是微软官宣的事情,我想大家都记忆尤新,没有资源将这个玩具开发为具有与 WCF 功能奇偶校验的完整产品,但是有许多客户 无法在不对其WCF服务进行完全重写的情况下迁移到 .NET Core。 Matt Connew最终决定 将花一些时间打磨一下的原型实现,包括添加NetTcp支持,并将代码捐赠给开源社区,托管到.NET基金会,看看这是否社区将围绕它构建的东西,以便在Microsoft之外生存下去。

    02

    [WCF安全系列]绑定、安全模式与客户端凭证类型:BasicHttpBinding

    整个安全传输是在WCF的信道层进行的,而绑定是信道层的缔造者,所以终结点采用哪种类型的绑定以及对绑定的属性进行怎样的设置决定了信道层最终采用何种机制实现消息的安全传输。具体来说,我们可以通过绑定设置最终采用的安全模式,以及基于相应安全模式下进行认证和消息保护的行为。 一、Binding安全相关的应用编程接口 不同的绑定类型由于其采用的传输协议不同,应用的场景也各有侧重,很难提供一种统一的应用编程接口完成基于不同绑定的安全设置,所以每一种绑定都具有各自用于安全设置相关的类型。但是基于对安全的设置,大部分系统预

    010

    C# WCF服务

    WCF(Windows Communication Foundation)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台。整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术。是Windows平台上开发分布式应用最佳的实践方式。 WCF是.Net框架中的技术,用来创建面向服务的应用程序,交换不同通信方案里的消息,以及执行服务操作生成的工作流。WCF应用程序由三部分组成 - WCF服务,WCF服务主机和WCF服务客户端。WCF平台有时也被称为服务模型。WCF的基本特征是互操作性。这是微软用于构建面向服务的应用程序的最新技术之一。根据基于消息的通信的概念中,一个HTTP请求可以被均匀地表示,WCF是一个统一的API而不管不同的传输机制。

    02

    我的WCF之旅(8):WCF中的Session和Instancing Management

    我们知道,WCF是MS基于SOA建立的一套在分布式环境中各个相对独立的Application进行Communication的构架。他实现了最新的基于WS-*规范。按照SOA的原则,相对独自的业务逻辑以service的形式封装,调用者通过Messaging的方式调用Service。对于承载着某个业务功能的实现的Service应该具有Context无关性、甚至是Solution无关性,也就是说个构成Service的operation不应该绑定到具体的调用上下文,对于任何调用,具有什么样的输入,就会有与之对应的输出。因为SOA的一个最大的目标就是尽可能地实现重用,只有具有Context无关性/Solution无关性,Service才能实现最大限度的重用。此外Service的Context无关性/Solution无关性还促进了另一个重要的面向服务的特征的实现:可组合性,把若干相关细粒度的Service封装成一个整体业务流程的Service。

    02
    领券