asp.net-mvc – 使用ASP.NET MVC的基础认证

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 使用ASP.NET MVC的基础认证前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
任何人都知道这是如何工作的,我正在使用.net成员资格提供者,只想拉一个xml列表.我也使用.net mvc sdk.所以这里的问题,当我添加[WebApiEnabled]在我的控制器的顶部我可以成功地拉xml / json.但是当我将[Authenticate]添加到我的控制器顶部时,我无法登录.作为示例curl -i“admin:pass”-H“Accept:application / xml” http://localhost:xxxx/Book

在此先感谢您的帮助

解决方法

好吧,所以我想出来,但解决方案可能是一个贫民窟.我从.net mvc源中获取了AuthorizeAttribute,并重新编写了OnAutorization方法.这绝对适用于我,但它只适用于基本身份验证,我不知道这是否是最安全的使用方法.然而,它确实解决了Web客户端能够访问安全的.net mvc休息服务的问题.
  1. public virtual void OnAuthorization(AuthorizationContext filterContext)
  2. {
  3. if (filterContext == null)
  4. {
  5. throw new ArgumentNullException("filterContext");
  6. }
  7.  
  8.  
  9. string auth = filterContext.HttpContext.Request.Headers["authorization"];
  10.  
  11. if (!String.IsNullOrEmpty(auth))
  12. {
  13. byte[] encodedDataAsBytes = Convert.FromBase64String(auth.Replace("Basic ",""));
  14. string val = Encoding.ASCII.GetString(encodedDataAsBytes);
  15. string userpass = val;
  16. string user = userpass.Substring(0,userpass.IndexOf(':'));
  17. string pass = userpass.Substring(userpass.IndexOf(':') + 1);
  18.  
  19. if (!System.Web.Security.Membership.Provider.ValidateUser(user,pass))
  20. {
  21. filterContext.Result = new HttpUnauthorizedResult();
  22. }
  23.  
  24. }
  25. else
  26. {
  27. if (AuthorizeCore(filterContext.HttpContext))
  28. {
  29.  
  30.  
  31. HttpCachePolicyBase cachePolicy = filterContext.HttpContext.Response.Cache;
  32. cachePolicy.SetProxyMaxAge(new TimeSpan(0));
  33. cachePolicy.AddValidationCallback(CacheValidateHandler,null /* data */);
  34. }
  35. else
  36. {
  37. // auth Failed,redirect to login page
  38. filterContext.Result = new HttpUnauthorizedResult();
  39. }
  40. }
  41.  
  42.  
  43. }

猜你在找的asp.Net相关文章