• webservice常用两种身份验证方式


    在项目开发,我们经常会使用WebService,但在使用WebService时我们经常会考虑以下问题:怎么防止别人访问我的WebService?从哪里引用我的WebService?对于第一个问题,就涉及到了WebService是安全问题,因为我们提供的WebService不是允许所有人能引用 的,可能只允许本公司或者是通过授权的人才能使用的。那怎么防止非法用户访问呢?很容易想到通过一组用户名与密码来防止非法用户的调用 。

    方式一:通过SOAP Header身份验证。

    1.我们实现一个用于身份验证的类,文件名MySoapHeader.cs 

    MySoapHeader类继承自System.Web.Services.Protocols.SoapHeader。且定义了两个成员变量,UserName和PassWord,还定义了一个用户认证的函数ValideUser。它提供了对UserName和PassWord检查的功能

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    /// <summary>
    ///MySoapHeader 的摘要说明
    /// </summary>
    public class MySoapHeader:SoapHeader
    {
        public MySoapHeader()
        {
            //
            //TODO: 在此处添加构造函数逻辑
            //
        }
        public string UserName;
        public string PassWord;
        public bool ValideUser(string in_UserName, string in_PassWord)  
        {
            if ((in_UserName == "admin") && (in_PassWord == "123456"))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

    2.下面我们创建WebService.asmx    WebService.cs代码如下:

    using System;
    using System.Collections;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    /// <summary>
    ///WebService 的摘要说明
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class WebService : System.Web.Services.WebService
    {
        public WebService()
        {
            //如果使用设计的组件,请取消注释以下行 
            //InitializeComponent(); 
        }
        public MySoapHeader header; ////定义用户身份验证类变量header
        [WebMethod(Description = "用户验证测试")]
        [System.Web.Services.Protocols.SoapHeader("header")]//用户身份验证的soap头 
        public string HelloWorld(string contents)
        {
            //验证是否有权访问 
            if (header.ValideUser(header.UserName, header.PassWord))
            {
                return contents + "执行了";
            }
            else
            {
                return "您没有权限访问";
            }
        }
    }

    3.客户端 创建个Default.aspx 

    Default.aspx .cs代码

    using System;
    using System.Configuration;
    using System.Data;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    public partial class _Default : System.Web.UI.Page 
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            com.cn1yw.WebService test = new com.cn1yw.WebService();//web引用(改成您自己的)
            com.cn1yw.MySoapHeader Header = new com.cn1yw.MySoapHeader();//web引用创建soap头对象(改成您自己的)
            //设置soap头变量
            Header.UserName = "admin";
            Header.PassWord = "123456";
            test.MySoapHeaderValue = Header;
            //调用web 方法
            Response.Write(test.HelloWorld("i am administrator..."));
        }
    }

    解决方案二:通过集成windows身份验证。

    1. 将web服务程序设为集成windows身份验证  
    2.客户端web引用代码

    Test.WebReference.Service1 wr = new Test.WebReference.Service1(); //生成web service实例 
    wr.Credentials = new NetworkCredential("admsp", "admsp@sp123", "computer01-global"); //(用户名,密码,域)admsp是用户名,该用户需要有一定的权限 
    lblTest.Text = wr.Add(2,2).ToString(); //调用web service方法

    该方案的优点是比较安全,性能较好,缺点是不便于移植,部署工作量大。

  • 相关阅读:
    6美元进公园随便挖钻石

    别了,四方
    九种感觉叫爱情,你遭遇过哪一种?(转)
    我提出辞职,老板竟然让我做选择题(转)
    五大绝招让你永远是人才
    人生必读十大启迪(1):生活到底是什么
    创业95%失败不是因项目本身
    穷国和富国差别在哪里
    一个丑女的感情独白
  • 原文地址:https://www.cnblogs.com/become/p/9198337.html
Copyright © 2020-2023  润新知