.NET中 webservice加密简谈(基础1)

在博客园都呆了几年了,一直都是看各位大神的文章。自己从来也没亲自写多点点。本码农打算从今年去也开始写写文章,打打基础,以备不时の需。废话不多说了,开始进入正题。高手就可以不用看了。仅是给新人看的。哈哈

  1. 加密目的:webservice最后部署了无非就是一个URL地址。只要知道地址就能够看到响应的结果。所以给webservice设置了访问用户和密码。增强安全性,使它只能被授权的用户使用。
  2. 集体实现过程如下:

(1):打开VS2010建立解决方案(WService20150106)(PageBaseWebservice.asmx)(个人觉得VS在大了推荐大家使用WCF,还是什么其他原因没有在创建的时候直接找到webservice项目,可以先创建一个空的ASP.net 项目,在添加就能找到webservice)。代码如下注释很清楚。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.Services;
 6
 7 namespace Webservice2015
 8 {
 9     /// <summary>
10     /// PageBaseWebservice 的摘要说明
11     /// </summary>
12     [WebService(Namespace = "http://tempuri.org/")]
13     [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
14     [System.ComponentModel.ToolboxItem(false)]
15     // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
16     // [System.Web.Script.Services.ScriptService]
17     public class PageBaseWebservice : System.Web.Services.WebService
18     {
19
20         public MySoapHeader _MySoapHeader;// 定义一个变量
21         /// <summary>
22         ///  重点是这个类是继承System.Web.Services.Protocols.SoapHeader 这是关键。加密就全靠这个了
23         /// </summary>
24         public class MySoapHeader : System.Web.Services.Protocols.SoapHeader
25         {
26             #region
27             /// <summary>
28             /// 用户名
29             /// </summary>
30             private string _name;
31             public string Name
32             {
33                 get { return _name; }
34                 set { _name = value; }
35             }
36             /// <summary>
37             /// 秘密
38             /// </summary>
39             private string _password;
40             public string Password
41             {
42                 get { return _password; }
43                 set { _password = value; }
44             }
45             #endregion
46
47             /// <summary>
48             /// 无参数的构造函数
49             /// </summary>
50             public MySoapHeader()
51             {
52             }
53             /// <summary>
54             /// 带参数的构造函数
55             /// </summary>
56             /// <param name="Name">参数用户名</param>
57             /// <param name="Password">参数秘密</param>
58             public MySoapHeader(string Name, string Password)
59             {
60                 this.Name = Name;
61                 this.Password = Password;
62             }
63         }
64
65         [WebMethod(Description = "验证权限", CacheDuration = 0, BufferResponse = true)]
66         [System.Web.Services.Protocols.SoapHeader("_MySoapHeader")]
67         public bool Validation()
68         {
69             /// 判断用户名 和密码 是否正确。 这里仅做测试。用户名和密码 可以写在配置文件中。
70             if (_MySoapHeader.Name == "KG" && _MySoapHeader.Password=="123456")
71                 // 匹配成功
72                 return true;
73             //匹配失败
74             return false;
75         }
76     }
77 }

(2):在创建一个WebServiceTest.asmx。这个和(1)中PageBaseWebservice.asmx 是继承关系。PageBaseWebservice 继承自 System.Web.Services.WebService。WebServiceTest 是继承PageBaseWebservice。代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;

namespace Webservice2015
{
    /// <summary>
    /// WebServiceTest 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
    // [System.Web.Script.Services.ScriptService]
    public class WebServiceTest : PageBaseWebservice
    {
        [WebMethod(Description = "验证测试", CacheDuration = 0, BufferResponse = true)]
        // 加上标记
        [System.Web.Services.Protocols.SoapHeader("_MySoapHeader")]
        public string HelloWorld()
        {
            if (Validation())// 验证
            {
                return "Hello World";
            }
            else
            {
                return "你没权限";
            }

        }
    }
}

(3):建立一个控制台程序。在添加引用。代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            /// 服务
            ServiceReference1.WebServiceTestSoapClient webclient = new ServiceReference1.WebServiceTestSoapClient();
            /// soap 下面就是要传过过去用户名和密码
            ServiceReference1.MySoapHeader my = new ServiceReference1.MySoapHeader();
            my.Name = "KG";
            my.Password = "123456";
            /// my 做为一个参数传过去。
           string str=  webclient.HelloWorld(my);
           Console.Write(str);
           Console.ReadKey();
        }
    }
}

(4):结果只有正确输入的时候才能返回helloword。否则返回的是没有权限。

时间: 2024-12-19 14:12:20

.NET中 webservice加密简谈(基础1)的相关文章

客户端GUI测试技术和自动化测试架构设计简谈

客户端自动化特点 客户端的自动化,通常做过的人都不是很愿意深入讨论.因为除了功能和逻辑之外,不得不面对各种界面变化,各种和环境交互,各种兼容问题以及想不到灰色地带,就算这样,也找不到太多有效的bug.然而即便如此,客户端的自动化必须去做,尤其是GUI的.它的自动化特点是: 复杂 成本高 不容易发现问题 技术要求高 架构很难通用 下面,从一些基本的东西开始一点点的讨论客户端GUI测试的一些问题和处理办法,以及自动化架构设计的一些思路.事实上就像上面说的,GUI的测试并不是为了发现bug,而是回归的

.NET简谈事务、分布式事务处理

在本人的 " .NET简谈事务本质论"一文中我们从整体上了解了事务模型,在我们脑子里能有一个全局的事务处理结构,消除对数据库事务的依赖理解,重新认识事务编程模型. 今天这篇文章我们将使用.NET C#来进行事务性编程,从浅显.简单的本地事务开始,也就是我们用的最多的ADO.NET事务处理,然后我们逐渐扩大事务处理范围,包括对分布式事务处理的使用,多线程事务处理的使用. 数据库事务处理 数据库事务处理我们基本都很熟悉了,begin Transaction --end Transactio

Linux进程管理简谈

Linux系统进程管理简谈 进程是什么? 简单来说进程是一个正在执行的程序的一个副本,存在生命周期,有段指令和代码在不断运行. linux内核存储信息的固定格式:task struct 进程的相关信息存储在链表中 多个任务的task struct组件的链表:task list 进程的创建:父进程创建子进程(内核创建init进程,剩余一切进程有init及其子进程进程创建) 父进程创建子进程时向内核调用fork()来创建子进程并且通过调用clone()复制父进程的信息给子进程 Linux进程的优先级

[转]细说SQL Server中的加密

简介 加密是指通过使用密钥或密码对数据进行模糊处理的过程.在SQL Server中,加密并不能替代其他的安全设置,比如防止未被授权的人访问数据库或是数据库实例所在的Windows系统,甚至是数据库所在的机房,而是作为当数据库被破解或是备份被窃取后的最后一道防线.通过加密,使得未被授权的人在没有密钥或密码的情况下所窃取的数据变得毫无意义.这种做法不仅仅是为了你的数据安全,有时甚至是法律所要求的(像国内某知名IT网站泄漏密码这种事在中国可以道歉后不负任何责任了事,在米国妥妥的要破产清算). SQL

加密解密技术基础、PKI及创建私有CA

加密解密技术基础.PKI及创建私有CA 一.背景 随着互联网的快速发展,整个互联网中涌入了大量的用户,正所谓林子大了什么鸟都有,随之而来的就是数据的安全性得不到保障:因此就有了对数据的加密及解密. 二.安全的目标 1.目标: 信息加密的目的是为了确保所传输的信息具有保密性,不被其他人所劫持后篡改信息:如果被篡改后接收方也应该能知道,而且也应该确保没被劫持的信息接收方可以读取. 2.数据在网络中传输过程中要保证三个要点: (1)数据的完整性:防止数据在传输过程中遭到未授权用户的破坏或篡改. (2)

简谈WP,IOS,Android智能手机OS

什么是智能手机? 相信到现在这个已经是傻瓜到不能再傻瓜的问题了 智能手机都不懂? 那你活着还有什么意思= = 但是为了谈论今天的三大主角:wp,ios,android 不得不回答一下这个笨笨的问题 如果没记错的话,我在高中的时候获得了我的第一把智能手机 没错,就是那时候火到爆的Nokia6120c 相信对小6,大家都不陌生 感觉那时候是人手一把的神器啊 小巧好用不说,竟然还能后台挂qq!(= =那时候确实很惊讶,竟然能在多个软件切来切去的) 在加上Nokia砖头之名 神机当之无愧啊,当时不知道羡

(iOS)Base64加密和DES加密、以及JAVA和iOS中DES加密统一性问题

我们在项目中为了安全方面的考虑,通常情况下会选择一种加密方式对需要安全性的文本进行加密,而Base64加密和DES64加密是常用的加密算法.我记得我在前一个项目中使用的就是这两种加密算法的结合:Base64 + DES加密.当然这需要移动端和后台服务器做一个统一. 1.Base64加解密 值得一提的是:apple提供了基础的Base64加解密算法.这样我们就可以直接使用方法去实现Base64加解密.先看一下apple都提供了哪些方法: @interface NSData (NSDataBase6

加密解密技术基础、PKI及创建私有私有CA

Linux基础中的加密.解密及openssl 数据为什么要加密?      由于互联网刚开始时使用的人非常少,在互联网中交流信息的人都比较"单纯"几乎没有安全问题:但随着互联网的快速发展,整个互联网中涌入了大量的用户,正所谓林子大了什么鸟都有,随之而来的就是数据的安全性得不到保障:因此就有了对数据的加密及解密. 安全的目标       信息加密的目的是为了确保所传输的信息具有保密性,不被其他人所劫持后篡改信息:如果被篡改后接收方也应该能知道,而且也应该确保没被劫持的信息接收方可以读取.

加密解密技术基础、PKI、及创建私有CA

一.加密解密技术基础 (一) 安全的目标:      1.保密性,confidentiality      2.完整性,integrity         系统完整性,数据完整性      3.可用性,avaliability(二) 攻击类型:     1. 威胁保密性的攻击:窃听.通信量分析     2. 威胁完整性的攻击:更改.伪装.重放.否认     3. 威胁可用性的攻击:拒绝服务(DoS)(三) 解决方案:      技术(加密和解密).服务(用于抵御攻击的服务以及为了实现上述目标而特