当前位置 : 主页 > 网页制作 > Nodejs >

WebServices身份验证

来源:互联网 收集:自由互联 发布时间:2021-06-24
导读 最近遇到一个问题,暴露在网络上的Web Service如何做身份验证,而不被其他人说是用。 众所周知,WebService是为企业需求提供的在线应用服务,其他公司或应用软件能够通过Internet来

导读

最近遇到一个问题,暴露在网络上的Web Service如何做身份验证,而不被其他人说是用。

众所周知,WebService是为企业需求提供的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。但在有些时候的某些应用服务不希望被未授权访问,那么此时我们可以一下几种方法来实现身份验证。


解决方案

第一种方法:在WebServices中引入SoapHeader

WebServices

MySoapHeader.cs类

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

namespace WS.WebServices
{
    public class MySoapHeader:System.Web.Services.Protocols.SoapHeader
    {
                
        //WebServices访问用户名
        public string UserName { get; set; }
        
        //WebServices访问密码
        public string Password { get; set; }


        public MySoapHeader()
        { 
            //在此处添加构造函数逻辑
        }
        public MySoapHeader(string uname, string upassword)
        {
            init(uname, upassword);
        }

        private void init(string uname, string upassword)
        {
            this.UserName = uname;
            this.Password = upassword;

        }

        //验证用户是否有权访问内部接口
        private bool isValid(string uname, string upassword, out string msg)
        {
            msg = "";
            if (uname == "admin" && upassword == "123456")
            {
                return true;
            }
            else
            {
                msg = "对不起,你无权调用此WebServices";
                return false;

            }

        }
        //验证用户是否有权访问外部接口
        public bool isValid(out string msg)
        {
            return isValid(this.UserName, this.Password, out msg);
        }
    }
}

WebService1.asmx

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using WS.WebServices;

namespace WS.WebService
{
    /// <summary>
    /// WebService1 的摘要说明
    /// </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 WebService1 : System.Web.Services.WebService
    {

        public WebService1()
        {
            //如果使用设计的组件,请取消注释以下行   
            //InitializeComponent();  
        }
        public MySoapHeader myheader;



        [WebMethod]
        public string HelloWorld() //普通WebServices,无需验证
        {
            return "Hello World";
        }


        [WebMethod]
        [SoapHeader("myheader")]//加入此特性标签的WebService需要验证,不加则为普通WebService无需验证
        public string GetTime()
        {
            string msg = "";

            //验证是否有权访问
            if (myheader.isValid(out msg) == false)
            {
                return msg;
            }

            //如果有权访问,就返回当前时间
            return DateTime.Now.ToString();
        }
    }
}

客户端

然后再客户端WS.WebClient中添加对WebServices项目的服务引用,命名空间为SR

客户端中的WebForm1.aspx.cs后台类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WS.WebClient
{

    using WS.WebServices;
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            
            SR.WebService1SoapClient client=new SR.WebService1SoapClient();实例化一个WebServices服务的客户端代理类。

            SR.MySoapHeader header = new SR.MySoapHeader();
            header.UserName = "admin";
            header.Password = "123456";
            string time = client.GetTime(header); //将这个header实例传递到GetTime这个方法中

            this.time.InnerText = time; //给这个time值赋给页面Id为time的服务器控件的InnerText属性

        

        }
    }
}

客户端中的WebForm1.aspx文件

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WS.WebClient.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

    <div id="time" runat="server">
    
    </div>
    </form>
</body>
</html>




网友评论