当前位置:  开发笔记 > 后端 > 正文

绕过表单身份验证自动重定向到登录,如何?

如何解决《绕过表单身份验证自动重定向到登录,如何?》经验,为你挑选了1个好方法。

我正在使用asp.net-mvc部署到iis6编写应用程序.我正在使用表单身份验证.通常当用户尝试在没有适当授权的情况下访问资源时,我希望将它们重定向到登录页面.FormsAuth让我很容易做到这一点.

问题:现在我有一个控制台应用程序访问的操作.什么是让这个动作响应w /状态401而不是将请求重定向到登录页面的最快方法?

我希望控制台应用程序能够对此401 StatusCode做出反应,而不是透明.我还想保留默认值,将未经授权的请求重定向到登录页面行为.

注意:作为测试我将其添加到我的global.asax并且它没有绕过表单身份验证:

protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
    HttpContext.Current.SkipAuthorization = true;
}

@Dale和Andy

我正在使用MVC预览4中提供的AuthorizeAttributeFilter.这将返回一个HttpUnauthorizedResult.这个结果正确地将statusCode设置为401.正如我所理解的那样,问题是asp.net正在拦截响应(因为它被调为401)并重定向到登录页面而不是让它通过.我想绕过某些网址拦截.



1> Dane O'Conno..:

好的,我解决了这个问题.我做了一个自定义ActionResult(HttpForbiddenResult)和自定义ActionFilter(NoFallBackAuthorize).

为了避免重定向,HttpForbiddenResult使用状态代码403标记响应.FormsAuthentication不会捕获使用此代码的响应,因此有效地跳过了登录重定向.NoFallBackAuthorize过滤器检查用户是否被授权,与包含的授权过滤器非常相似.它的不同之处在于它在拒绝访问时返回HttpForbiddenResult.

HttpForbiddenResult非常简单:

public class HttpForbiddenResult : ActionResult
{
    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException("context");
        }
        context.HttpContext.Response.StatusCode = 0x193; // 403
    }
}

似乎无法跳过FormsAuthenticationModule中的登录页面重定向.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有