Web Service 中的身份验证策略--使用自定义SOAP 标题

自定义SOAP标题可以限制调用服务的用户范围,不让我的服务随便被人使用。下面是个例子:
using  System;
using
 System.Web;
using
 System.Web.Services;
using
 System.Web.Services.Protocols;

[WebService(Namespace 
= "http://tempuri.org/"
)]
[WebServiceBinding(ConformsTo 
=
 WsiProfiles.BasicProfile1_1)]
public class
 Service : System.Web.Services.WebService
{
    
public
 SecurityHeader currentUser;
    
public
 Service()
    
{

        
//
如果使用设计的组件,请取消注释以下行 
        
//InitializeComponent(); 

    }

    [WebMethod, SoapHeader(
"currentUser")]
    
public string GetResult(string
 queryString)
    
{
        
if
(ValidateUser(currentUser.UserName,currentUser.UserPass))
        
{
            
return "你发送的字符串是:"+
queryString;
        }

        
else
            
return "对不起:" + currentUser.UserName+",您不是合法的用户!";
    }

    
//检验SOAP HEADER 
    private bool ValidateUser(string user, string pass)
    
{
        
if (user.Equals("user"&& pass.Equals("user"
))
            
return true
;
        
else

            
return false;
    }

}

//自定义Soap Header Class
public class  SecurityHeader : System.Web.Services.Protocols.SoapHeader
{
    
public string
 UserName;
    
public string
 UserPass;
}
下面是客户端的调用
using  System;
using
 System.Collections.Generic;
using
 System.ComponentModel;
using
 System.Data;
using
 System.Drawing;
using
 System.Text;
using
 System.Windows.Forms;

namespace
 SoapHeader
{
    
public partial class
 Form1 : Form
    
{
        
public
 Form1()
        
{
            InitializeComponent();
        }


        
private void button_Invoke_Click(object sender, EventArgs e)
        
{
            SoapHeader.localhost.SecurityHeader header 
= new
 SoapHeader.localhost.SecurityHeader();
            header.UserName 
=
 textBox_User.Text;
            header.UserPass 
=
 textBox_Pass.Text;
            SoapHeader.localhost.Service service 
= new
 SoapHeader.localhost.Service();
            service.SecurityHeaderValue 
=
 header;
            
this.textBox_Output.Text+=service.GetResult(this.textBox_Input.Text)+
Environment.NewLine;
        }

    }

}
运行效果:
r_12454544.JPG
调用失败:
r_457845421.JPG

你可能感兴趣的:(web Service)