使用Soap头自定义身份验证 

  在intranet场景下,Windows身份验证动作良好,并且开发人员可以在自身域中对用户进行身份验证。如果在Web.config文件中将WEB服务设置为WINDOWS身份验证模式,那么必须为每一个用户创建一个本地几户或域账户。对于拥有大量用户的应用程序来说,这不是一个实用的解决方案,美工豕对于Internet上的应用程序来说这是不可能实现的。对Internet而言,可能需要根据结构化查询语言(SQL)数据库来执行自定身份验证和授权。在这种情况下应该向WEB传递自定凭据(例如用户名或密码),并让WEB服务处理身份验证和授权。
    这时候我可以用一种比较简便的方法--使用SOAP头。WEB服务消费者在SOAP头中添加用户ID和密码信息,WEB服务方法会检索这些信息,并使用这些信息来执行自定义的验证从而调用相应的服务 。

下面是一个简单的例子:

服务器端:
using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

using System.Security.Principal;
namespace test2
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [ToolboxItem(false)]
    public class Service1 : System.Web.Services.WebService
    {
        
       public  ValidateUser valiUser = new ValidateUser();//一定要是public访问类型。

       

        //
        [SoapHeader("valiUser")]
        [WebMethod]
        public string GetAuthority()
        {
            string Msg="";
            valiUser.ValiHeader(out Msg);
            return Msg;
        }
    }
    //
    public class ValidateUser:System.Web.Services.Protocols.SoapHeader
    {
        //用户名和密码
        private string username;
        private string password;
        //
        public string UserName
        {
            get { return username; }
            set { username = value; }
        }
        //
        public string PassWord
        {
            get { return password; }
            set { password = value; }
        }
        //
        public bool ValiHeader(out string ReturnMsg)
        {
            bool flag = false;
            if (UserName == "admin" && PassWord == "admin")
            {
                flag = true;
                ReturnMsg = "You Are Successfully";
            }
            else
            {
                ReturnMsg = "You Are Failted";
            }
            return flag;
        }
    }

 客户端:(我是写在一个按钮下面,向浏览器输出)
 protected void Button2_Click(object sender, EventArgs e)
        {
            Service1 service = new Service1();
            ValidateUser valiUser = new ValidateUser();
            valiUser.UserName = "admin";
            valiUser.PassWord = "admin";
            service.ValidateUserValue = valiUser;
            Response.Write(service.GetAuthority());
        }
输出为:“You Are Successfully”
注意:要使用SOAP头实现一个自定义身份验证方案,还必须在WEB服务的web.config文件中禁用其他的身份验证类型,如下所示:
<configuration>
    <system.web>
       <authentication mode="None"/>
    </system.web>
</configuration>   

当使用SOAP头传输凭据时,惟一必须解决的重要问题就是安全了,不过我们可以将SOAP头中身份信息进行强加密来解决这个问题。
这将在我下一片文章中出现。
  


推荐好友:
文章来自: 互联网
引用通告地址: :http://www.loverer.com/trackback.asp?tbID=JOKNDPJ8&key=JOKOOOISEQNNCON0
标签检索: Soap头 自定义身份验证
相关日志:
  n 自定义身份验证Soap头 进行加密解密 [971]

评论: 0 | 引用: 0 | 查看次数: 881
发表评论
昵 称:
密 码: 游客发言不需要密码.
验证码: 点击可刷新此验证码
内 容:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭