WebService带用户名密码验证(复习用)

在项目开发的过程中,WebService是经常要用的,当调用WebService方法时,需要经过服务的验证才可以调用,一般就是用户名/密码验证,还有一个就是证书.下面程序使用的是用户名/密码的方式,很简单的一个程序.

先看服务端的代码(ws_Service)

MySoapHeader.cs   这里通过继承SoapHeader实现对用户名/密码的验证

public class MySoapHeader:System.Web.Services.Protocols.SoapHeader
   {
       private string userID = string.Empty;
       private string userPW = string.Empty;

       public string UserId
       {
           get { return userID; }
           set { userID = value; }
       }
       public string UserPW
       {
           get { return userPW; }
           set { userPW = value; }
       }
       public MySoapHeader()
       { }
       public MySoapHeader(string name, string password)
       {
           userID = name;
           userPW = password;
       }

       private bool IsValid(string nUserId, string nPassWord, out string nMsg)
       {
           nMsg = "";
           try
           {
               if (nUserId == "admin" && nPassWord == "admin")
               {
                   return true;
               }
               else
               {
                   nMsg = "对不起,你无权调用Web服务";
                   return false;
               }
           }
           catch
           {
               nMsg = "对不起,你无权调用Web服务";
               return false;
           }
       }
       public bool IsValid(out string nMsg)
       {
           return IsValid(userID,userPW,out nMsg);
       }
   }

Service1.asmx文件代码:

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]

public class Service1 : System.Web.Services.WebService
{
    public MySoapHeader myHeader = new MySoapHeader();
    [WebMethod]
    public string GetMsg()
    {
        Thread.Sleep(5000);
        return "Hello World";
    }

    [SoapHeader("myHeader")]
    [WebMethod(Description="获取用户列表")]
    public string GetMain()
    {
        string msg = "";
        if (!myHeader.IsValid(out msg))
        {
            return msg;
        }
        return "Main";
    }
}
这里面有两个方法,其中GetMsg方法是不需要验证的,而GetMain方法需要进行用户名/密码的验证,这个可以在客户端调用时进行验证.

客户端添加对服务端的引用…

Program.cs文件

class Program
{
    static void Main(string[] args)
    {
        localhost.Service1SoapClient proxy = new ws_Client.localhost.Service1SoapClient();
        MySoapHeader header = new MySoapHeader();

        header.UserId = "admin";
        header.UserPW = "admin";
        string result = proxy.GetMain(header);

        //string result = proxy.GetMsg();

        Console.WriteLine(result);
        Console.ReadKey();
    }

}
时间: 2024-07-31 14:32:19

WebService带用户名密码验证(复习用)的相关文章

Selenium + Chrome Diver使用带用户名密码认证的HTTP代理的方法

默认情况下,Chrome的--proxy-server="http://ip:port"参数不支持设置用户名和密码认证.这样就使得"Selenium + Chrome Driver"无法使用HTTP Basic Authentication的HTTP代理.一种变通的方式就是采用IP地址认证,但在国内网络环境下,大多数用户都采用ADSL形式网络接入,IP是变化的,也无法采用IP地址绑定认证.因此迫切需要找到一种让Chrome自动实现HTTP代理用户名密码认证的方案.

【WCF】使用“用户名/密码”验证的合理方法

我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然后在服务器端自定义一个消息拦截器来验证用户名和密码. 以老周不靠谱的学识水平认为,这样做不好,直接把明文而且敏感信息放在SOAP头中传输,这尺度实在太大了,太暴露了,广电局是不会允许的,虽然现在流行穿得越少越好,但那些是婊子的境界.像用户名密码这些重要信息,怎么能直接传输呢,这很容易被偷窥的. 其实

【WCF】Silverlight+wcf+自定义用户名密码验证

本文摘自 http://www.cnblogs.com/virusswb/archive/2010/01/26/1656543.html 在昨天的博文Silverlight3+wcf+在不使用证书的情况下自定义用户名密码验证 中提到了,我想实现的安全效果,就是客户端访问的时候不需要https,也不需要安装证书(商业证书客户端会自动信任),但是暴露的wcf接口不是每个人可以调用的,因为sl+wcf只支持basicHttpBinding一种绑定,在这种绑定下面其实是可以不适用传输安全,然后消息安全选

WCF 安全性之 自定义用户名密码验证

案例下载 http://download.csdn.net/detail/woxpp/4113172 客户端调用代码 通过代理类 代理生成 参见 http://www.cnblogs.com/woxpp/p/6232298.html X509证书创建 http://www.cnblogs.com/woxpp/p/6232325.html 自定义用户名密码验证需要证书的支持 服务器端配置代码 <system.serviceModel> <services> <service n

OpenVPN2.4.3 基于用户名密码验证方式(实战)

安装部署参考"Open'VPN安装部署文档" 基于用户名密码验证: 1.修改server.conf: tls-auth ta.key 0 # This file is secret auth-user-pass-verify /usr/local/openvpn/config/checkpsw.sh via-env client-cert-not-required username-as-common-name script-security 3 注:如果加上client-cert-n

WCF用户名密码验证方式

WCF使用用户名密码验证 服务契约 namespace WCFUserNameConstract { [ServiceContract] public interface IWcfContract { [OperationContract] bool GetOnWcfService(ref string MessageInfo); } } 服务实现 namespace WcfUserNameService { public class WcfUserNameService : IWcfContr

WCF全双工以及用户名密码验证

WCF是支持TCP双向连接的,支持Server和Client之间互发协议,通过 订阅-发布 的全双工形式实现,全双工的用户名密码验证需要X509证书加密,单工模式的用户名密码验证时,X509证书是可选的. 在全双工模式下,会有断线的问题,目前我还没有根本解决,在单位的项目中只是做了断线重连的处理,但希望有识之人告知更好的方法... 下面是WCF用户验证的Demo,包含单工和全双工模式,刚入门,有什么好的建议多指教. 附上Demo下载地址:WCFDemo.rar Demo运行前需要注册X509证书

Python实现LDAP用户名密码验证

网上借鉴了不少东西,下面是python代码,备份后用. 思路,因为每个用户的组都不一样,这样就导致了dn不一致的情况, 据需要先根据用户名获取该用户的dn,然后再bind用户名和密码进行验证. 反正是实现了,至于方式对不对后续再研究了. 机器上要先安装python-ldap包 1 #coding: utf-8 2 import ldap 3 ''' 4 实现LDAP用户登录验证,首先获取用户的dn,然后再验证用户名和密码 5 ''' 6 7 ldappath = "ldap://xxxx&quo

Centos6.4下快速构建基于用户名密码验证的openvpn服务器

如今VPN应用已经非常广泛了,之前就写过一篇关于PPTPD的博文.链接是http://cyr520.blog.51cto.com/714067/1161788. 家里最近新换了一个宽带.居然没办法用拨上公司的PptpdVPN,一直拨号状态一直停留在正在验证用户名和密码这一步.百度谷歌了一大圈,也没解决这个问题.貌似是因为宽带运营商屏蔽GRE协议的原因.作为运维人员,不能及时的连上公司的内部网络是一件很让人不爽的事情. 干脆再搞一套OpenVPN吧,据说OpenVPN非常强大,可以适应很复杂的网络