惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
T
The Blog of Author Tim Ferriss
C
Check Point Blog
博客园_首页
J
Java Code Geeks
云风的 BLOG
云风的 BLOG
L
LangChain Blog
小众软件
小众软件
Stack Overflow Blog
Stack Overflow Blog
爱范儿
爱范儿
Vercel News
Vercel News
博客园 - Franky
V
V2EX
IT之家
IT之家
U
Unit 42
N
Netflix TechBlog - Medium
腾讯CDC
Apple Machine Learning Research
Apple Machine Learning Research
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
博客园 - 叶小钗
H
Help Net Security
V
Visual Studio Blog
GbyAI
GbyAI

博客园 - qy1141

Mysql插入Emoji表情出错 spring+mybatis事务不起作用的原因 安卓开发随记 springmvc + spring + ibatis + mysql Eclipse中配置svn J2EE环境配置与工具使用 SqlServer数据库空间使用情况常用命令 数据库备份与还原 关于数据库优化杂技 windows2008吃尽内存的解决办法 asp.net中http提交数据所遇到的那些坑 在C#中使用消息队列RabbitMQ 重新开博 WCF Security系列(1)--Security概述 如果为网站生成自签名SSL证书 关于证书 转:最真实的2006年应届毕业生真实薪水 转:如何修复Team Foundation Server Workgroup Edition 不小心删除了所有Team Foundation Licensed Users组内用户问题 转 :TFS(Team Foundation Server)使用经验
WCF Security系列(2)--服务器端的安全
qy1141 · 2007-12-11 · via 博客园 - qy1141

  先来看一个最简单的加法运算通过wcf来实现。 

namespace Contract
{
    [ServiceContract]
    
public interface IService
    
{
        [OperationContract]
        
int add(int a, int b);
    }

}


public class Service:Contract.IService
    
{
        
IService 成员
}

    服务端的配置文件如下:

<system.serviceModel>
  
<behaviors>
        
<serviceBehaviors>
                
<behavior name="ServiceBehavior">
                    
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
        
</serviceBehaviors>
  
</behaviors>
  
<services>
        
<service behaviorConfiguration="ServiceBehavior" name="Service.Service">
                
<endpoint binding="wsHttpBinding" contract="Contract.IService" />
                
<host>
                    
<baseAddresses>
                        
<add baseAddress="http://localhost:123/service" />
                    
</baseAddresses>
                
</host>
       
</service>
   
</services>
</system.serviceModel>

  

OK,至此我们已经建立了一个wcf的加法运算。下一步我将讲解如何为建立好的应用程序加入安全机制。
  我们可以通过在服务器端配置证书来加密和解密传输数据来保证数据的完整性和机密性。我们来为服务器配置证书。
  由于我在这里只做Demo演示,证书可以通过markcert.exe命令来完成,如果作为企业应用的话,请到CA申请受信任的证书。证书的介绍和制作方法在我以前写过的Blogs上可以看到。
  在WCF中可以通过将上述步骤中生成的证书以配置文件的方式添加到WCF的配置文件中,就可以实现服务器的安全,以及数据在传输中的加密和解密了。
  服务器端配置文件添加如下内容

<serviceCredentials>
   
<clientCertificate>
       
<authentication certificateValidationMode="None" />
   
</clientCertificate>
  
<serviceCertificate findValue="Guotai.WeighingSystem.ServerCA" storeLocation="CurrentUser" x509FindType="FindBySubjectName" />
</serviceCredentials>

  同样在客户端添加以下节点:

<endpointBehaviors>
   
<behavior name="NewBehavior">
                    
<clientCredentials>
                        
<serviceCertificate>
                            
<authentication certificateValidationMode="None" />
                        
</serviceCertificate>
                    
</clientCredentials>
   
</behavior>
</endpointBehaviors>

  

请注意serviceCertificate节点,由于我们建立的证书只是用来测试用,不受信任的,因此将证书验证模式设为:None,否则程序运行时报错。
  OK,现在我们已经实现了数据完整性和数据机密性。
  有兴趣的朋友,可以用Service Trace Viewer这个工具来将WCF在数据传输中所记录的日志文件打开,如果WCF服务配置了以上的安全措施,那么在这个工具中可以看到WCF传输过程中的数据都是以密文的方式传输的。Enjoy..
  在下面两节中将介绍认证和授权。