使用Soap头自定义身份验证

原创 2007年09月27日 14:48:00
在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头自定义身份验证

使用Soap头自定义身份验证     在intranet场景下,Windows身份验证动作良好,并且开发人员可以在自身域中对用户进行身份验证。如果在Web.config文件中将WEB服务设置为W...

自定义身份验证Soap头 进行加密解密

自定义身份验证Soap头 进行加密解密     在上篇文章中我们了解了使用自定义SOAP头进行身份验证,使webService服务的身份验证变得灵活,简便。 但是是以明文的方式在网上传输,不能...

使用struts2自定义拦截实现统一的身份验证模式

最近在项目开发中需要进行身份的统一认证,之前.NET的思想就是通过父页面(基类)进行控制,现在使用struts2进行开发的话,当然还是使用拦截器比较方便,而且比较省事,网上提供了很多实现的例子,但是都...

web services用soap头实现身份验证

在调用Web Serivices时,往往需要身份验证,使得通过验证的用户才能调用你Web Serivices中的方法.当然你可以通过将参数添加到每个需要自定义身份验证方案的Web services方法...

自定义ASP.NET MVC身份验证(Identity)信息

ASP.NET Identity的一个主要特点就是能够很方便地增加用户身份信息(profile information)。在已有的ASP.NET Membership系统中,用户和身份信息(profi...

Spring AOP自定义注解 身份验证

最近碰到APP开发权限验证的问题 用过滤器不能解决某些无需验证的方法 所以最终选择用AOP 解决 代码如下定义一个权限注解 package com.thinkgem.jeesite.common.an...

shiro身份验证入门结合shiro的MD5加密技术自定义Realm-简单Demo

这个Demo,只是一个简单的shiro身份验证部分,不涉及到授权部分。算是shiro入门。 具体的shiro介绍就不说了,官网和草根们在网上都分享了很多,原理自己去看吧。这里直接写代码了。 第一:准备...

Reporting Service 2016 自定义身份验证

一般MSRS都是windows身份验证,在2016版本之前网上会有一些教程教你怎么去配置,但是关于2016的配置教程网上几乎没有的,又碰巧这次的项目中用的就是MSRS2016最后没办法,公司老板去微软...

Shiro基础知识02----shiro身份验证(HelloWorld,Subject,Reaml(自定义reaml)),Authenticator及AuthenticationStrategy

一、HelloWorld 本文使用Maven,配置jar请找其他相关文件 1、首先准备一些用户身份/凭据(shiroHelloWorld.ini) [users] Tom=123456 jack=1...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用Soap头自定义身份验证
举报原因:
原因补充:

(最多只允许输入30个字)