• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
AnsonWu的博客
博客园    首页    新随笔    联系   管理    订阅  订阅

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
posted @ 2006-10-08 22:32  AnsonWu  阅读(478)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3