使用Soap头自定义身份验证
作者:ym110 日期:2008-07-07
在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头中身份信息进行强加密来解决这个问题。
这将在我下一片文章中出现。
这时候我可以用一种比较简便的方法--使用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]
文章来自: 互联网
标签检索: Soap头 自定义身份验证 n 自定义身份验证Soap头 进行加密解密 [971]
评论: 0 | 引用: 0 | 查看次数: 881
发表评论
订阅
上一篇
下一篇





