本文将记述基于 "用户名/密码" 方式的身份验证开发步骤。

1. 服务器数字证书
 

(1) 安装证书管理中心(Certification Authority):控制面板——〉添加删除程序里安装

(2) 打开IIS,到默认站点(Default Web Site)——〉右键菜单,属性(Properties),打开属性管理窗口——〉(目录安全)Directory Security——〉Server Certificate,下一步一直到最后生成certreq.txt

(3) 进入Certification Authority,右键根节点,选择All Tasks—Submit new question,选择生成的certreq.txt文件

(4) Click Pending requests, choose Request ID , 右键菜单所以任务---Issue。证书将出现在Issued Certificates,双击在detailcopy file生成证书

(5) IIS中安装证书

或者使用命令的方式准备证书:D:\>makecert -r -pe -n "CN=MyServer" -ss My -sky exchange

2. 创建服务
 1WCF 安全关于用户名/密码身份验证设置    [ServiceContract]
 2WCF 安全关于用户名/密码身份验证设置    public interface IService1
 3    }

 


 1WCF 安全关于用户名/密码身份验证设置    public class Service1 : IService1
 2    }

我们通过继承 UserNamePasswordValidator 来创建一个自定义验证器。
 1WCF 安全关于用户名/密码身份验证设置public class MyUserNamePasswordValidator : UserNamePasswordValidator
 2
接下来创建服务器配置文件,我们使用IC报价网 WsHttpBinding,采取 TransportWithMessageCredential安全模式。其他的设置还包括 certificateValidationMode、userNamePasswordValidationMode、customUserNamePasswordValidatorType 等。
 1WCF 安全关于用户名/密码身份验证设置
 2WCF 安全关于用户名/密码身份验证设置    <system.serviceModel>
 3WCF 安全关于用户名/密码身份验证设置
 4WCF 安全关于用户名/密码身份验证设置        <services>
 5WCF 安全关于用户名/密码身份验证设置            <service name="WcfServiceUserName.Service1" behaviorConfiguration="NewBehavior">
 6WCF 安全关于用户名/密码身份验证设置                <!-- Service Endpoints -->
 7WCF 安全关于用户名/密码身份验证设置
 8WCF 安全关于用户名/密码身份验证设置                <endpoint address="https://servername/WCFUserName/Service1.svc/ws1" binding="wsHttpBinding" bindingConfiguration="Binding1" contract="WcfServiceUserName.IService1">
 9WCF 安全关于用户名/密码身份验证设置                    <identity>
10WCF 安全关于用户名/密码身份验证设置                        <dns value="servername(要和证书中申请的一样)"/>
11WCF 安全关于用户名/密码身份验证设置                    </identity>
12WCF 安全关于用户名/密码身份验证设置                </endpoint>
13WCF 安全关于用户名/密码身份验证设置                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
14WCF 安全关于用户名/密码身份验证设置            </service>
15WCF 安全关于用户名/密码身份验证设置        </services>
16WCF 安全关于用户名/密码身份验证设置        <bindings>
17WCF 安全关于用户名/密码身份验证设置            <wsHttpBinding>
18WCF 安全关于用户名/密码身份验证设置                <binding name="Binding1">
19WCF 安全关于用户名/密码身份验证设置                    <security mode="TransportWithMessageCredential">
20WCF 安全关于用户名/密码身份验证设置            <message clientCredentialType="UserName"/>
21WCF 安全关于用户名/密码身份验证设置                    </security>
22WCF 安全关于用户名/密码身份验证设置                </binding>
23WCF 安全关于用户名/密码身份验证设置            </wsHttpBinding>
24WCF 安全关于用户名/密码身份验证设置        </bindings>
25WCF 安全关于用户名/密码身份验证设置        <behaviors>
26WCF 安全关于用户名/密码身份验证设置            <serviceBehaviors>
27WCF 安全关于用户名/密码身份验证设置                <behavior name="NewBehavior">
28WCF 安全关于用户名/密码身份验证设置                    <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
29WCF 安全关于用户名/密码身份验证设置                    <serviceMetadata httpGetEnabled="true"/>
30WCF 安全关于用户名/密码身份验证设置                    <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
31WCF 安全关于用户名/密码身份验证设置                    <serviceDebug includeExceptionDetailInFaults="true"/>
32WCF 安全关于用户名/密码身份验证设置                    <serviceCredentials>
33WCF 安全关于用户名/密码身份验证设置                        <clientCertificate>
34WCF 安全关于用户名/密码身份验证设置                            <authentication certificateValidationMode="None"/>
35WCF 安全关于用户名/密码身份验证设置                        </clientCertificate>
36WCF 安全关于用户名/密码身份验证设置            <!--userNamePasswordValidationMode can not equal Window,must be Custom-->
37WCF 安全关于用户名/密码身份验证设置            <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="CustomUserNamePasswordValidator(类的名称),程序集名称"/>
38WCF 安全关于用户名/密码身份验证设置                    </serviceCredentials>
39WCF 安全关于用户名/密码身份验证设置                </behavior>
40WCF 安全关于用户名/密码身份验证设置            </serviceBehaviors>
41WCF 安全关于用户名/密码身份验证设置        </behaviors>
42WCF 安全关于用户名/密码身份验证设置  </system.serviceModel>

3. 创建客户端
启动服务器后,v创建客户端代理文件。注意自动生成的客户端配置文件中包含了服务器数字证书的相关信息。
 1WCF 安全关于用户名/密码身份验证设置    <system.serviceModel>
 2WCF 安全关于用户名/密码身份验证设置        <bindings>
 3WCF 安全关于用户名/密码身份验证设置            <wsHttpBinding>
 4WCF 安全关于用户名/密码身份验证设置                <binding name="WSHttpBinding_IService1" closeTimeout="00:01:00"
 5WCF 安全关于用户名/密码身份验证设置                    openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
 6WCF 安全关于用户名/密码身份验证设置                    bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
 7WCF 安全关于用户名/密码身份验证设置                    maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
 8WCF 安全关于用户名/密码身份验证设置                    messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
 9WCF 安全关于用户名/密码身份验证设置                    allowCookies="false">
10WCF 安全关于用户名/密码身份验证设置                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
11WCF 安全关于用户名/密码身份验证设置                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
12WCF 安全关于用户名/密码身份验证设置                    <reliableSession ordered="true" inactivityTimeout="00:10:00"
13WCF 安全关于用户名/密码身份验证设置                        enabled="false" />
14WCF 安全关于用户名/密码身份验证设置                    <security mode="TransportWithMessageCredential">
15WCF 安全关于用户名/密码身份验证设置                        <transport clientCredentialType="None" proxyCredentialType="None"
16WCF 安全关于用户名/密码身份验证设置                            realm="" />
17WCF 安全关于用户名/密码身份验证设置                        <message clientCredentialType="UserName" negotiateServiceCredential="true"
18WCF 安全关于用户名/密码身份验证设置                            algorithmSuite="Default" establishSecurityContext="true" />
19WCF 安全关于用户名/密码身份验证设置                    </security>
20WCF 安全关于用户名/密码身份验证设置                </binding>
21WCF 安全关于用户名/密码身份验证设置            </wsHttpBinding>
22WCF 安全关于用户名/密码身份验证设置        </bindings>
23WCF 安全关于用户名/密码身份验证设置        <client>
24WCF 安全关于用户名/密码身份验证设置            <endpoint address="https://servername/WCFUserName/Service1.svc/ws1"
25WCF 安全关于用户名/密码身份验证设置                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IService1"
26WCF 安全关于用户名/密码身份验证设置                contract="IService1" name="WSHttpBinding_IService1">
27WCF 安全关于用户名/密码身份验证设置                <identity>
28WCF 安全关于用户名/密码身份验证设置                    <dns value="servername" />
29WCF 安全关于用户名/密码身份验证设置                </identity>
30WCF 安全关于用户名/密码身份验证设置            </endpoint>
31WCF 安全关于用户名/密码身份验证设置        </client>
32WCF 安全关于用户名/密码身份验证设置    </system.serviceModel>

开始调用服务,注意将 CertificateValidationMode 设置为 None,当然也可以写到配置文件中。
 1WCF 安全关于用户名/密码身份验证设置            try
 2          

OK,测试通过。测试环境:Windows XP操作系统、VS2008 WCF、VS2008 Windows应用程序。

相关文章:

  • 2021-06-24
  • 2022-12-23
  • 2022-03-04
  • 2021-07-31
  • 2021-04-23
  • 2022-12-23
  • 2021-11-11
  • 2021-08-26
猜你喜欢
  • 2021-05-31
  • 2021-07-29
  • 2021-09-22
  • 2021-08-02
  • 2022-12-23
相关资源
相似解决方案