资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
WebService 的几种验证方式的几种验证方式1.1 WebService 设计设计1.1.1 传输基本参数传输基本参数1.1.2 传输数据集合传输数据集合(1) 数组(2) DataSet1.2 WebService 异常处理异常处理1.3 WebService 性能性能1.4 WebService 认证认证请参考 WebService 认证学习报告1.4.1 各种认证方式各种认证方式1.4.1.1 Windows 认证认证() 配置 IIS 中 WebService 文件的权限为集成 Windows 认证() 设置 Web.Config1.4.2 跟踪用户访问跟踪用户访问1.5 WebService 调用调用1.5.1 Windows 认证认证() NT 认证使用时,Credentials 必须指定System.Net.CredentialCache.DefaultCredentials当设置为 default 时,客户端根据服务端配置决定采用 NTLM 认证还是其他的安全认证() 实例化 WebService 对象() 添加 WebService 认证信息() 调用 WebService 方法LocalTest.GIISService localTest = new LocalTest.GIISService();CredentialCache credentialCache = new CredentialCache();NetworkCredential credentials = new NetworkCredential(“XuJian“, “password“, “Snda“);credentialCache.Add(new Uri(“http:/localhost/GIIS/ GIISService.asmx“),“Basic“, credentials);localTest.Credentials = credentialCache;string tt = localTest.Hello(“ssssssss“);1.6 GIIS 中中 WebServiceWebService 认证实现认证实现该部分为本次 GIIS 中实现的认证方式,考虑到相关配置、维护性,不涉及其他认证方式的处理1.6.1 实现方式实现方式SOAP Header + DES 加解密 + Windows 认证1.6.2 实现原理实现原理() SOAP HeaderSOAP 包括四个部分: SOAP 封装(envelop),定义描述消息SOAP 编码规则SOAP RPC 调用和应答协定SOAP 绑定,底层协议交换信息其中 envelop 由一个或多个 Header 和一个 Body 组成,Header 元素的每一个子元素称为一个 SOAP Header() DES 对称加解密通过 Client 端传输过来的已加密编码,在客户端进行解码分析,实现认证,认证的 user 信息来自于 GIIS 的系统登录用户列表对编码和解码的字节类型存储在 Web.Config 文件中,要保持一致并对称,且字符长度需设为 8 位() 集成 Windows 认证作为域用户可以通过该方式来调用、处理 WebService,但非域用户看通过我们自定义的 SOAP Header 方式来验证1.6.3 实现步骤(实现步骤(SOAP)() 设置.asmx 文件的访问权限为“集成 Windows 认证”,不允许匿名访问() 创建 WebService 认证类 CredentialSoapHeader.cs,继承 SoapHeader*调用者的信息从系统维护的 WscUser 表中获取namespace XXX.WebServicepublic class CredentialSoapHeader : System.Web.Services.Protocols.SoapHeader#region - Private Attribute -private string m_UserID = string.Empty;private string m_Password = string.Empty;#endregion#region - Private Attribute -/ / user id/ public string UserIDgetreturn m_UserID;setm_UserID = value;/ / user password/ public string PassWordgetreturn m_Password;setm_Password = value;#endregion/ / initial user id and papssword/ / user id/ user passwordpublic void Initial(string userID, string password)UserID = userID;PassWord = password;/ / check user when use web service/ / user id/ user password/ return message/ public bool IsValid(string userID, string password, out string message)message = “;trystring userName = Encrypt.DecryptClient(userID);string userPassword = Encrypt.DecryptClient(password);Entity.GiWscuser userAuthority = new Entity.GiWscuser();userAuthority.QueryMode = true;userAuthority.Active += true;userAuthority.Account += userName.Trim();userAuthority.Password += userPassword.Trim();DataTable dtblUser = userAuthority.Query(new String userAuthority.Account, userAuthority.Password , false, -1).Tables0;if (dtblUser.Rows.Count 0)return true;elsemessage = “sorry, you have no access authority for current web service“;return false;catch(Exception ex)message = “sorry, you have no access authority for current web service “ + ex.Message;return false;/ / check user authority/ / message tip/ public bool IsValid(out string message)return IsValid(m_UserID, m_Password, out message);() 创建 DES 加解密类,实现明文编码与解码public class Encrypt private static string ms_Key = System.Configuration.ConfigurationManager.AppSettings“EncryptKey“;private static string ms_IV = System.Configuration.ConfigurationManager.AppSettings“EncryptIV“;/ / Encrypt a string/ / string needs to be encrypted/ the encrypted stringpublic static string EncryptClient(string ecryptString)if(ecryptString != “)DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();cryptoProvider.Key = ASCIIEncoding.ASCII.GetBytes(ms_Key);cryptoProvider.IV = ASCIIEncoding.ASCII.GetBytes(ms_IV);MemoryStream memoryStream = new MemoryStream();CryptoStream cryptoStream = new CryptoStream(memoryStream,cryptoProvider.CreateEncryptor(), CryptoStreamMode.Write);StreamWriter streamWriter = new StreamWriter(cryptoStream);streamWriter.Write(ecryptString);streamWriter.Flush();cryptoStream.FlushFinalBlock();memoryStream.Flush();return Convert.ToBase64String(memoryStream.GetBuffer(),0,Int32.Parse(memoryStream.Length.ToString();elsereturn “;/ / Decrypt a string/ / string needs to be decrypted/ the decrypted stringpublic static string DecryptClient(string decryptString)if(decryptString != “)DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();cryptoProvider.Key = ASCIIEncoding.ASCII.GetBytes(ms_Key);cryptoProvider.IV = ASCIIEncoding.ASCII.GetBytes(ms_IV);Byte buffer = Convert.FromBase64String(decryptString);MemoryStream memoryStream = new MemoryStream(buffer);CryptoStream cryptoStream = new CryptoStream(memoryStream, cryptoProvider.CreateDecryptor(), CryptoStreamMode.Read);StreamReader streamReader = new StreamReader(cryptoStream);return streamReader.ReadToEnd();elsereturn “;(
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号