微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Soap头自定义身份验证

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

下面是一个简单的例子:

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

 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
    {
        
       
  ValidateUser valiUser  new  ValidateUser();//一定要是public访问类型。

       


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

 客户端:(我是写在一个按钮下面,向浏览器输出
protected void  Button2_Click( object  sender, EventArgs e)
        {
            Service1 service 
 Service1();
            ValidateUser valiUser 
 ValidateUser();
            valiUser.UserName 
;
            valiUser.PassWord 
;
            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.cnblogs.com/seebook/archive/2007/07/07/809599.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐