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

2024-03-21

我正在编写一个使用 asp.net-mvc 部署到 iis6 的应用程序。我正在使用表单身份验证。通常,当用户尝试在未经适当授权的情况下访问资源时,我希望他们被重定向到登录页面。 FormsAuth 对我来说这件事很简单。

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

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

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

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

@戴尔和安迪

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


好的,我解决了这个问题。我制作了自定义 ActionResult (HttpForbiddenResult) 和自定义 ActionFilter (NoFallBackAuthorize)。

为了避免重定向,HttpForbiddenResult 使用状态代码 403 标记响应。FormsAuthentication 不会捕获具有此代码的响应,因此实际上会跳过登录重定向。 NoFallBackAuthorize 过滤器检查用户是否已获得授权,与包含的 Authorize 过滤器非常相似。它的不同之处在于,当访问被拒绝时,它返回 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
    }
}
  

似乎无法跳过 FormsAuthentication 模块中的登录页面重定向。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 如何在多个环境中处理 OmniAuth 回调?

    我有一个应用程序专门使用 Facebook 作为身份验证提供程序 并已正确设置生产模式的回调 为了实现这一点 您需要为 Facebook 应用程序提供一个站点 URL 和一个用于回调的站点域 在我的例子中是http appname hero
  • Swift 中迭代对象类属性

    Swift 中有没有一种简单的方法来迭代类的属性 即我有一个 Person 类 它有 3 个属性 姓名 姓氏 年龄 有没有类似的东西 for attribute in Person println attribute attribute v
  • 如何在 CQL3 中使复合键列具有空列值

    这听起来可能很愚蠢 因为 SQL 的复合主键中没有空值 但只是想确认我们是否可以在 CQL3 中拥有相同的功能 因此 我们有一个像这样的表来存储宽行 CREATE TABLE keyspace12 colFamily1 id text co
  • 如何安全地实现Java插件安全?

    我正在设计一个用于在 Java 应用程序中加载 处理和支持插件的系统 我认为在部署之前对此绝对至关重要的一个功能是能够建立一个安全的环境 在该环境中插件仅限于允许其执行的操作 我无法理解如何以编程方式使用策略文件而不在启动时运行 Djava
  • 在 php 中创建一个 .sql 文件

    我使用下面的代码来获取 wp option 值 function option value change global wpdb myrows wpdb gt get results SELECT FROM wp options forea
  • 有什么区别?

    我注意到的用法
  • 如何使用 ReactJS 重新加载 iframe?

    我的 ReactJS 组件包含一个 iframe 为了响应外部页面中的事件 我需要重新加载 iframe 如果用户已导航到 iframe 中的另一个页面 我需要将其重置为首次加载该页面时的 URL 该网址可用于this props 我尝试过
  • 如何清除先前绘制的 Matplotlib 文本框?

    我可以在其中制作文本框matplotlib美好的 但我不知道如何从渲染图中删除它们 好像没有figure text clear or figure text visible False 绘制文本框后 这是怎么做到的 与传说不同的是 您似乎无
  • 更改配置单元中的列类型

    我昨天刚开始学习 hive 我一直致力于更改 hive 中列的类型 我想问列类型的更改是否对它们有某种限制 因为我只能进行特定类型的更改 例如我可以将 int 转换为 double string 转换为 double double 转换为
  • type.__setattr__ 与 object.__setattr__ 有什么不同?

    type setattr 用于类 基本上是元类的实例 object setattr 另一方面 用于类的实例 这是完全可以理解的 我没有看到这两种方法之间有显着差异 至少在Python级别 我注意到这两种方法使用相同的属性分配过程 如果我错了
  • core-js 安装后脚本错误失败

    当我尝试在现有的节点中安装节点模块时 我遇到以下错误Angular project 我正在尝试在 Windows 计算机 Win32 X64 中安装节点模块 gt email protected cdn cgi l email protec
  • 如何增加 Android Google Play 服务排行榜上的玩家得分?

    我阅读了有关的所有文档排行榜 https developers google com games services common concepts leaderboards在Google Play服务中 当我调用GameClient的sub
  • 如何在spark-jdbc应用程序中给出表名以读取RDBMS数据库上的数据?

    我正在尝试使用 Spark 读取 greenplum 数据库上存在的表 如下所示 val execQuery s select allColumns 0 as flagCol from schema table where period y
  • 从终端在 xcode PhoneGap 项目中定义方案

    我正在编写一个脚本来存档phonegap 项目的iOS 部分 该脚本会擦除项目所在的目录 然后使用源代码管理中的最新代码重新填充该目录 然后我跑 phonegap local build ios为了构建该项目 然而 为了归档该项目 我需要定
  • 在 Node.js 中生成并终止进程

    我正在尝试在 javascript 中生成一个进程 并在一段时间后终止它 出于测试目的 最后 该进程将是一个无限循环 我需要在指定时间使用不同的参数重新启动 因此我认为生成进程并终止它是执行此操作的最佳方法 我的测试代码是 var spaw
  • 用户默认值/KeyedArchiver 挫败感

    我正在开发一个作业应用程序 该应用程序为每个作业使用自定义作业对象 我试图在 standardUserDefaults 中存储 NSMutableArray 通过 initWithArray 转换为 NSArray 但在保存和重新加载数组时
  • 如何将 subversion 树从 v1.7 降级到 v1.6?

    有没有办法将 subversion 工作副本从版本 1 7 降级到版本 1 6x 版本 1 7 使用单个 svn 根文件夹和 sqlite 来存储元数据 因此 tigris org 中的转换 python 脚本不起作用 您是否知道一种不涉及
  • 如何关闭 Android 应用程序?

    如何关闭 Android 应用程序 我没有找到应用程序对象的关闭命令 我想在出现某些严重错误时关闭并重新启动 如果存在某种 严重错误 那么您应该在代码中处理它 而不是尝试重新启动应用程序 您无法关闭 Android 中的应用程序 但是一旦所
  • 如何防止光标在退出 Vim 插入模式时向后移动一个字符?

    是否可以取消上述行为 额外学分的任务 想办法强制 Vim 在退出插入模式后立即刷新光标位置 虽然我不建议更改默认的光标机制 实现相关行为的一种方法是使用以下内容 插入模式映射 inoremap
  • 绕过表单身份验证自动重定向到登录,如何?

    我正在编写一个使用 asp net mvc 部署到 iis6 的应用程序 我正在使用表单身份验证 通常 当用户尝试在未经适当授权的情况下访问资源时 我希望他们被重定向到登录页面 FormsAuth 对我来说这件事很简单 问题 现在我有一个由