FormsAuthentication认证
方式A
前端代码
<script type="text/javascript"> var ticket = "secret"; $.ajax({ url: "/api/default/getuserbyname", type: "GET", dataType:"json", data: { "username": "first" }, beforeSend: function (xhr) { // 添加请求头信息 xhr.setRequestHeader('Authorization','BasicAuth'+ ticket); }, success: function (data) { alert(JSON.stringify(data)); } }); </script>
自定义特性
public class AllowAnonymousAttribute:Attribute { }
public class BasicAuthorizeAttribute:AuthorizeAttribute { public override void OnAuthorization(HttpActionContext actionContext) { if(actionContext.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().FirstOrDefault()!= null) { return; } if(actionContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().FirstOrDefault()!= null) { return; } var authorization = actionContext.Request.Headers.Authorization; if(authorization == null) { this.HandleUnAuthorization(); } else if(this.ValidateTickte(authorization.Parameter)) { } else { this.HandleUnAuthorization(); } } private void HandleUnAuthorization() { } private bool ValidateTickte(string encryptTicket) { try { if(string.IsNullOrWhiteSpace(encryptTicket)) { return false; } var strTicket = FormsAuthentication.Decrypt(encryptTicket).UserData; return string.Equals(strTicket,string.Format("{0}&{1}","Admin","123456")); } catch (Exception) { return false; } } }
控制器
public class DefaultController : ApiController { private List<User> _userList = new List<User> { new User {UserID = 1, UserName = "first", UserEmail = "first@qq.com"}, new User {UserID = 2, UserName = "second", UserEmail = "second@qq.com"}, new User {UserID = 3, UserName = "third", UserEmail = "third@qq.com"} }; [HttpGet] [BasicAuthorize] public IEnumerable<User> GetUserByname(string username) { string userParameterName = HttpContext.Current.Request.QueryString["username"]; return _userList.Where(p=> string.Equals(p.UserName,userParameterName,StringComparison.OrdinalIgnoreCase)); } } public class User { public int UserID { get; set; } public string UserName { get; set; } public string UserEmail { get; set; } }
方式二
前端代码
<script type="text/javascript"> var user = { UserID: "1", UserName: "first", UserEmail: "first@qq.com" }; $.ajax({ url: "/api/default/Login", type: "get", dataType: "json", data: { "account": "admin", "password": "123" }, success: function (data) { var result = JSON.parse(data); if (result.Result) { ticket = result.Ticket; alert(result.Ticket); } else { alert("failed"); } } }); </script>
后台代码
[HttpGet] public string Login(string account, string password) { FormsAuthenticationTicket formsAuthenticationTicket = new FormsAuthenticationTicket(0, account, DateTime.Now, DateTime.Now.AddHours(1), true, string.Format("{0}&{1}", account, password), FormsAuthentication.FormsCookiePath); var result = new { Result = true, Ticket = FormsAuthentication.Encrypt(formsAuthenticationTicket) }; return JsonConvert.SerializeObject(result); }

浙公网安备 33010602011771号