加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 23:38:43 所属栏目:asp.Net 来源:网络整理
导读:任何人都知道这是如何工作的,我正在使用.net成员资格提供者,只想拉一个xml列表.我也使用.net mvc sdk.所以这里的问题,当我添加[WebApiEnabled]在我的控制器的顶部我可以成功地拉xml / json.但是当我将[Authenticate]添加到我的控制器顶部时,我无法登录.作为
任何人都知道这是如何工作的,我正在使用.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休息服务的问题.
public virtual void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext == null)
        {
            throw new ArgumentNullException("filterContext");
        }


        string auth = filterContext.HttpContext.Request.Headers["authorization"];

        if (!String.IsNullOrEmpty(auth))
        {
            byte[] encodedDataAsBytes = Convert.FromBase64String(auth.Replace("Basic ",""));
            string val = Encoding.ASCII.GetString(encodedDataAsBytes);
            string userpass = val;
            string user = userpass.Substring(0,userpass.IndexOf(':'));
            string pass = userpass.Substring(userpass.IndexOf(':') + 1);

            if (!System.Web.Security.Membership.Provider.ValidateUser(user,pass))
            {
                filterContext.Result = new HttpUnauthorizedResult();
            }

        }
        else
        {
            if (AuthorizeCore(filterContext.HttpContext))
            {


                HttpCachePolicyBase cachePolicy = filterContext.HttpContext.Response.Cache;
                cachePolicy.SetProxyMaxAge(new TimeSpan(0));
                cachePolicy.AddValidationCallback(CacheValidateHandler,null /* data */);
            }
            else
            {
                // auth failed,redirect to login page
                filterContext.Result = new HttpUnauthorizedResult();
            }
        }


    }

(编辑:李大同)

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

    推荐文章
      热点阅读