【问题标题】:Single-page webpages, Asp.net MVC and authentication单页网页、Asp.net MVC 和身份验证
【发布时间】:2023-03-22 16:10:01
【问题描述】:

我熟悉表单身份验证如何与 ASP.NET MVC 配合使用;这不是太难。但我有点不确定身份验证如何与单页 Web 应用程序一起工作。当然,我可以使用单页应用程序处理初始登录,因为会有回发并且我可以进行标准表单身份验证。但在那之后,我将使用 ajax 来访问更多的网页内容。

我的想法是用 Jquery 实现一个间隔函数,每 20 分钟左右触发一次,这将要求输入密码以重新进行身份验证。对 asp.net MVC 单页 Web 应用进行身份验证的“最佳实践”是什么?

【问题讨论】:

    标签: jquery asp.net-mvc authentication


    【解决方案1】:

    您也可以使用表单身份验证。 ajax 请求与整页回传通过相同的管道,因为它们只是具有不同内容类型和有效负载的普通 HTTP 请求。因此,一旦您对用户进行身份验证并创建了身份验证 cookie,那么它将在服务器上传输。因此,服务器将以标准方式对其进行检查。您唯一需要处理的是重定向到未经过身份验证的用户的登录页面。您可以在客户端处理此问题(默认情况下 XHR 请求不处理 http 重定向,但您可以编写自定义代码来处理它们)。为 ajax 请求返回 401 http 状态码:

        public class AuthorizeAjaxAttribute : AuthorizeAttribute
        {    
            protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
            {
                if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest() &&
                    // angular.js requests
                    filterContext.RequestContext.HttpContext.Request.ContentType == "application/json" ||
                    filterContext.RequestContext.HttpContext.Request.ContentType == "application/xml" ||
                   )
                {
                    // ajax request returns HTTP 401 (Unauthorized) status code
                    filterContext.Result = new Http401Result();
                }
                else
                {
                    // standard behavior - redirect to login page
                    base.HandleUnauthorizedRequest(filterContext);
                }
            }
        }
    

    然后在客户端处理它(取决于您的客户端框架):

    $(document).ajaxError(function (event, jqxhr, settings, exception) {
        if (jqxhr.status == 401) { //Forbidden, go to login
            //Use a reload, WIF will redirect to Login
            location.url = "/Account/Login";
        }
    });
    

    【讨论】:

    • 啊,好吧,我想我明白了!我将编写一些代码,并将结果发布在这里。唯一的事情是,在用户第一次登录后,我想避免重定向离开单页(以防在初始登录后需要重新验证)。但是,从您告诉我的内容来看,这似乎很容易实现。非常感谢您在这里为我指明了正确的方向!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多