加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService的两种用户验证方式

发布时间:2020-12-17 02:58:09 所属栏目:安全 来源:网络整理
导读:1,使用SoapHeader传递和验证用户 ?Web Service端的代码: ?1.1先创建一个继承自System.Web.Services.Protocols.SoapHeader ??? CredentialSoapHeader类: ?? public class CredentialSoapHeader : SoapHeader ?? { ?private string _userName ; ?private strin

1,使用SoapHeader传递和验证用户
?Web Service端的代码:
?1.1先创建一个继承自System.Web.Services.Protocols.SoapHeader
??? CredentialSoapHeader类:
?? public class CredentialSoapHeader : SoapHeader
?? {
?private string _userName ;
?private string _userPassword ;

?public string UserName
?{
??get { return _userName ; }
??set { _userName = value ; }
?}

?public string UserPassword
?{
??get { return _userPassword ; }
??set { _userPassword = value ; }
?}
?? }

? 1.2创建对外发布的Web Service方法
? public class MyService :? System.Web.Services.WebService
? {
?private CredentialSoapHeader m_credentials ;
?public CredentialSoapHeader Credentails
?{
??get { return m_credentials ; }
??set { m_credentials = value ; }
?}
???????
??????? //对外发布的服务
??????? [WebMethod(BufferResponse = true,Description = "欢迎方法",CacheDuration = 0,EnableSession=false,
???MessageName = "HelloFriend",TransactionOption = TransactionOption.Required)]
?[SoapHeader("Credentails")]
?public string Welcome(string userName)
?{
??this.VerifyCredential(this) ;
??return "Welcome " + userName ;
?}

??????? //验证是否合法
??????? private void VerifyCredential(MyService s)
?{
??if ( s.Credentails == null || s.Credentails.UserName == null || s.Credentails.UserPassword == null )
??{
???throw new SoapException("验证失败",SoapException.ClientFaultCode,"Security") ;
??}
??????????????? //在这里可以进一步进行自定义的用户验证
?}
? }

? 创建使用MyService的客户端(本处使用WinForm来做实例)
? 先把MyService的引用添加进来
? public class ClientForm : System.Windows.Forms.Form
? {
?public ClientForm()
?{
??MyService s = new MyService() ;
??this.InitWebServiceProxy(s) ;
??string temp = s.Welcome("test") ;
??
??MessageBox.Show(temp) ;
?}

?private void InitWebServiceProxy(MyService s)
?{
??CredentialSoapHeader soapHeader = new CredentialSoapHeader() ;
??soapHeader.UserName = "test" ;
??soapHeader.UserPassword = "test" ;
??s.CredentialSoapHeaderValue = soapHeader ;

??string urlSettings = null ; //这里可以从配置文件中获取

??if (urlSettings != null )
??{
???s.Url = urlSettings ;
??}

??s.Credentials = (System.Net.NetworkCredential)CredentialCache.DefaultCredentials? ;
?}
? }
?
?
2,使用验证票(AuthorizationTicket)
using System.Web.Security ;
[WebMethod()]
public string GetAuthorizationTicket(string userName,string password)
{
???? //这里可以做一些自定义的验证动作,比如在数据库里验证用户的合法性等
???? FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(userName,false,timeOut) ;
???? string encryptedTicket = FormsAuthentication.Encrypt(ticket) ;
???? Context.Cache.Insert(encryptedTicket,userName,null,DateTime.Now.AddMinutes(timeout),TimeSpan.Zero) ;
???? return encryptedTicket ;
}

private bool IsTicketValid(string ticket,bool IsAdminCall)
{
??? if (ticket == null || Context.Cache[ticket] == null)
??? {
? // not authenticated
? return false;
??? }
??? else
??? {
???????? //这里再做一些验证,比如在数据库里验证用户的合法性等
??? }
}

[WebMethod()] public Book GetBookByBookId(int bookId) { ??? if (IsTicketValid) ??? { ??????? //验证通过才可以执行特定操作了 ??? } }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读