C#进阶系列 WebApi身份认证解决方案推荐:Basic基础认证

2019-12-30 11:46:11于海丽

 这个基本的原理。下面就按照这个原理来看看每一步的代码如何实现。

三、Basic基础认证的代码示例

首先说下我们的示例场景,上次介绍 CORS 的时候我们在一个解决方案里面放了两个项目Web和WebApiCORS,我们这次还是以这个为例来说明。

1、登录过程1.1、Web前端


<body>
  <div style="text-align:center;"> 
    <div>用户名:<input type="text" id="txt_username" /></div>
    <div>密 码:<input type="password" id="txt_password" /></div>
    <div><input type="button" value="登录" id="btn_login" class="btn-default" /></div>
  </div>
</body>

$(function () {
  $("#btn_login").click(function () {
    $.ajax({
      type: "get",
      url: "http://www.easck.com//登录成功之后将用户名和用户票据带到主界面
          window.location = "/Home/Index?UserName=" + data.UserName + "&Ticket=" + data.Ticket;
        }
      },
      error: function (e) {
      },
      complete: function () {

      }

    });
  });
});

1.2、登录的API接口


  public class UserController : ApiController
  {
    /// <summary>
    /// 用户登录
    /// </summary>
    /// <param name="strUser"></param>
    /// <param name="strPwd"></param>
    /// <returns></returns>
    [HttpGet]
    public object Login(string strUser, string strPwd)
    {
      if (!ValidateUser(strUser, strPwd))
      {
        return new { bRes = false };
      }
      FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(0, strUser, DateTime.Now,
              DateTime.Now.AddHours(1), true, string.Format("{0}&{1}", strUser, strPwd),
              FormsAuthentication.FormsCookiePath);
      //返回登录结果、用户信息、用户验证票据信息
      var oUser = new UserInfo { bRes = true, UserName = strUser, Password = strPwd, Ticket = FormsAuthentication.Encrypt(ticket) };
      //将身份信息保存在session中,验证当前请求是否是有效请求
      HttpContext.Current.Session[strUser] = oUser;
      return oUser;
    }

    //校验用户名密码(正式环境中应该是数据库校验)
    private bool ValidateUser(string strUser, string strPwd)
    {
      if (strUser == "admin" && strPwd == "123456")
      {
        return true;
      }
      else
      {
        return false;
      }
    }
  }

  public class UserInfo
  {
    public bool bRes { get; set; }

    public string UserName { get; set; }

    public string Password { get; set; }

    public string Ticket { get; set; }
  }