WebApi 自定义授权属性不起作用

2024-02-01

我需要使用活动目录中的一个或多个特定用户来保护我的 Web api,在 web.config 中我有以下代码:

<configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

    <section name="users" type="System.Configuration.NameValueFileSectionHandler,System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

  </configSections> 
  <users> 
    <add key="user" value="domain\loginname" /> 
  </users> 
  <system.web> 
    <authentication mode="Windows" /> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
  </system.web>

然后我有一个自定义授权属性,它从上面显示的 web.config 部分读取用户。

public class MyAuthorizeAttribute : AuthorizeAttribute
    {

        public MyAuthorizeAttribute(params string[] userKeys)
        {
            List<string> users = new List<string>(userKeys.Length); 
            var allUsers = (NameValueCollection)ConfigurationManager.GetSection("users");
            foreach (var userKey in userKeys)
            {
                users.Add(allUsers[userKey]);
            }

            this.Users = string.Join(",", users);
        }

        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            bool isAuthorized = base.AuthorizeCore(httpContext);
            bool isRequestHeaderOk = false;
            return isAuthorized && isRequestHeaderOk;
        }
    }

问题是授权核心永远不会在调试器中命中,浏览器中的 JSON 始终显示,即使我放置硬编码 false ,断点也永远不会在那里命中。

然后我用自定义授权属性装饰我的控制器

[MyAuthorize("user")]
        [ResponseType(typeof(tblCargo))]
        public IHttpActionResult GettblCargosByActivo()
        {
            var query = from c in db.tblCargos
                        orderby c.strCargo
                        select c;

            //var result = Newtonsoft.Json.JsonConvert.SerializeObject(query);
            //return result;

            return Ok(query);
        }

在 IIS 中,唯一启用的方法是 Windows 身份验证

当我从另一台计算机浏览该站点时,我会看到身份验证窗口,但上面显示的授权方法永远不会被命中。

这是一篇很好的文章,引导我走向正确的方向(我相信)Asp.net WebApi 中的自定义授权 - 一团糟? https://stackoverflow.com/questions/26464848/custom-authorization-in-asp-net-webapi-what-a-mess


  1. 你应该使用AuthorizeAttribute in System.Web.Http代替System.Web.Mvc
  2. 实施IsAuthorized反而。

protected override bool IsAuthorized(HttpActionContext actionContext)
    {
        bool isAuthorized = base.IsAuthorized(actionContext);
        bool isRequestHeaderOk = false;
        return isAuthorized && isRequestHeaderOk;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebApi 自定义授权属性不起作用 的相关文章

  • 函数原型和数组参数

    我正在学习 C 语法 并且已经开始研究数组了 我想问你一个问题 但首先让我回顾一下 这样我就知道我已经弄清楚了 我知道您可以使用以下语法将变量定义为数组 name
  • ResourceDictionary 源中的 Uri 语法(通用 Windows 平台)

    我正在迁移我的Windows 8 1项目到Windows 10 通用 Windows 平台 这时我被拦住了ResourceDictionary改变在UWP 为了简单起见 我有包含 2 个项目的 Windows 8 1 解决方案 App pr
  • F# 内联如何工作?

    对于 F 我的理解是您可以使用 inline 关键字在调用站点执行类型专门化 那是 val inline a gt b gt c when a or b static member a b gt c 约束条件是 a or b必须有一个静态成
  • 按位非运算符

    为什么要按位运算 0 打印 1 在二进制中 不是0应该是1 为什么 你实际上很接近 在二进制中 不是0应该是1 是的 当我们谈论一位时 这是绝对正确的 然而 一个int其值为0的实际上是32位全零 将所有 32 个 0 反转为 32 个 1
  • .NET 中 IEqualityComparer 中 GetHashCode 的作用是什么?

    我试图了解 IEqualityComparer 接口的 GetHashCode 方法的作用 下面的例子取自MSDN using System using System Collections Generic class Example st
  • 了解 MVC-5 身份

    我创建了一个新的ASP NET MVC 5申请与Individual User Accounts然后更新了所有的Nuget packages在解决方案中 现在我尝试遵循一些教程中显示的一些指南 但遇到了一些问题 第一个是一个名为Applic
  • 为什么Boost在“程序选项”中使用全局函数覆盖来实现自定义验证器

    这个例子 http www boost org doc libs 1 55 0 doc html program options howto html idp163429032显示一个名为validate在全局范围内定义重载函数boost
  • 使用 MapViewOfFile 有什么限制吗?

    我正在尝试将内存映射文件用作 hFile CreateFile State Path GENERIC READ FILE SHARE READ FILE SHARE WRITE 0 OPEN EXISTING FILE FLAG SEQUE
  • 使用 for 循环创建链表

    这是我的结构 struct ListItem int data struct ListItem next 假设链表的第一个节点的 data 0 我想编写一个 for 循环来创建大小为 5 的链表 但我不知道如何工作 我尝试了以下方法 int
  • 如何忽略搜索条件中的空属性

    我有一个不好的要求要做 无论如何 我必须在我的应用程序中实现它 我有一个Track class public class Track public string Name get set public string City get set
  • 复杂的 C 声明

    我刚刚在互联网上浏览了一些代码 发现了这个 float foo SIZE SIZE 我如何阅读这份声明 是否有一套特定的规则来阅读如此复杂的声明 我有一段时间没做这个了 从 开始foo然后向右走 float foo SIZE SIZE fo
  • 如何在 C# 中通过 JavaScript 回调运行 QUnit 测试并获取测试结果?

    在我的几个项目中 我使用 MVC 模式将代码 关注点 分为 3 层 模型层和控制层都在 C 上运行 因此我使用 MSTest 或 NUnit 等测试框架来验证这些层的功能需求 对于视图层 我使用 QUnit 来测试 JavaScript 文
  • 一个对大文件有效的轻量级 XML 解析器?

    我需要解析潜在的巨大 XML 文件 所以我猜这排除了 DOM 解析器 是否有任何优秀的 C 轻量级 SAX 解析器 在占用空间上可与 TinyXML 相媲美 XML的结构非常简单 不需要诸如命名空间和DTD之类的高级东西 只是元素 属性和
  • 如何最好地为 Visual Studio 2017 构建的 CMake C++ 项目设置输出目录?

    我使用 Visual Studio 2017 使用 vcxproj 文件构建 C 桌面项目 我喜欢默认行为 其中输出目录是项目下面的子目录 例如 myproj sln myproj vcxproj x64 myproj release my
  • 派生类的聚合初始化

    以下代码无法使用 Visual Studio2017 或在线 GDB 进行编译 我期望它能够编译 因为迭代器只是一个具有类型的类 并且它是从公共继承的 这是不允许的还是在 VS2017 中不起作用 template
  • C# 编译器编译 .txt .obj .java 文件

    using System class Program public static void Main Console WriteLine Hello World Console ReadLine 我将文件另存为1 java 2 obj an
  • 序列化时如何跳过 xml 声明?

    我正在尝试输出一个没有 xml 头的 xml 文件 例如 我试过 Type t obj GetType XmlSerializer xs new XmlSerializer t XmlWriter xw XmlWriter Create c
  • RabbitMQ + Windows + LDAP 无需发送密码

    我正在尝试在 Windows 7 上使用 RabbitMQ 3 6 2 进行 LDAP 身份验证 授权 我已经在应用程序发送用户名 密码的情况下进行了基本身份验证 但密码位于我需要弄清楚如何进行的代码中避免 有没有人在不提供密码的情况下成功
  • 字符串常量之前应有非限定 ID

    我目前正在编写一个 C 应用程序 它与 math h 结合实现了振荡器 我拥有的代码应该可以很好地用于该应用程序 尝试编译目标文件 但是我遇到编译器错误 很可能与语法 等有关 我认为这与命名空间有关 错误 终端输出 User Name Ma
  • Selenium WebDriver 在按钮单击事件上无法正常工作。这里有什么问题呢?

    I am using following code to scrape data from a website I have following interface 这是 HTML div class es content div

随机推荐

  • Visual Studio Extensions - 支持多个版本的VS

    我一直在编写一个扩展 编辑器分类器项目 带有一些其他功能 它在 VS2013 上运行良好 但我需要支持其他版本 VS2012 和 VS2015 当它超出预览时 当我刚刚添加支持的版本时vsixmanifest 我面临的问题是 出口ITest
  • js函数不调用自动填充函数

    我有一个输入字段 其中包含州名称并在其他字段上显示相应的区域 当我更改状态字段的值时 区域的值也应该更改 它不适用于我的代码 这有什么问题 div class col md 4 form group style padding right
  • MongoDb 使用位置运算符拉取

    我的文档结构如下 id 12342342 items ownerId 123 dates 2014 10 01 2014 10 02 ownerId 234 dates 2014 10 01 2014 10 02 我想从父对象的ownerI
  • 低延迟、大规模消息队列

    我正在重新思考 Facebook 应用程序和云计算时代的大型多人游戏 假设我要在现有开放协议之上构建一些东西 并且我想为 1 000 000 个同时玩家提供服务 只是为了解决问题 假设每个玩家都有一个传入消息队列 用于聊天等 平均还有一个传
  • 查找带有 USB 设备 VID/PID 的 /dev 条目

    我想制作一个程序来检测哪些 dev sd 条目链接到已知的 USB VID PID 对 你知道我如何获得 USB 记忆棒的 VID PID 吗 dev sd 您可以使用udevadm为了这 在输出中udevadm info q proper
  • 通过 UIBezierPath 移动 CALayer

    我有一个图层将从 UIBezierPath 上的 A 点移动到 B 点 我发现了很多涉及 CAAnimation 和 UIBezierPath 的示例 但我只需将图层从指定点移动到贝塞尔曲线路径上的另一个点 任何建议 将不胜感激 Thank
  • 裁剪图像时添加细白线 (Objective-C OSX)

    我正在剪切一张大图像并将其保存为许多不同的图像 我首先在iOS它工作正常 但是当我尝试将代码移植到OSX 一条细白线 1 像素 出现在图像的顶部和右侧 该线不是纯白色或实线 参见下面的示例 这里是iOS制作一个子图像的代码 就像冠军一样 v
  • 如何从 HIVE 中的日期减去月份

    我正在寻找一种方法来帮助我从 HIVE 中的日期中减去月份 我有个约会2015 02 01 现在我需要从这个日期减去 2 个月 这样结果应该是2014 12 01 你们能帮我一下吗 select add months 2015 02 01
  • BigQuery 选择 * 两列除外

    我想从公共 BigQuery github repos 数据集中选择除以下两条记录之外的所有内容 author nameAND差异 old mode 根据我问的类似问题 我想我想运行类似于 standardSQL SELECT REPLAC
  • 如何仅在functions.auth.user().onCreate完成后完成登录

    我正在使用 firebase 函数 并且有一个在用户创建时添加新集合的函数 问题是有时用户在功能完成之前登录 因此用户已登录但尚未创建新集合 然后我收到错误消息 缺少或权限不足 因为规则找不到该集合 我该如何处理 仅当所有内容都来自时 是否
  • 在表格单元格内垂直拉伸 div - IE8

    如何在表格单元格内垂直拉伸 DIV 我想height 100 就可以了但在某些情况下 事实并非如此 至少在 IE8 中 这是一个简单的例子 一个 3 行表格 包含页眉 内容和页脚 我希望 内容 单元格内的 内容 DIV 垂直拉伸 100 在
  • 如何组合 kotlin 委托属性:可观察、可否决和“按映射”?

    我正在尝试结合代表 可观察的 https kotlinlang org api latest jvm stdlib kotlin properties delegates observable html with vetoable http
  • .NET Framework 4.0 安装程序是否也安装了 .NET 3.5?

    NET 4 0 旨在与 3 5 并行运行 并且不会运行 3 5 应用程序 这让我担心必须指示我的用户下载 NET 3 5 而不仅仅是 最新版本 我在一篇博客中读到 如果尚未安装 4 0 安装程序也会安装 3 5 但我现在无法测试它 有人尝试
  • 如何使用 XPath 和 Java 更新 XML

    我有一个 XML 文档以及该文档的 XPath 表达式 我必须在运行时使用 XPath 更新文档 我如何使用 Java 来做到这一点 下面是我的xml
  • pytorch 中图像分割的通道明智 CrossEntropyLoss

    我正在做图像分割任务 总共有 7 个类 所以最终的输出是像 batch 7 height width 这样的张量 它是一个 softmax 输出 现在直觉上我想使用 CrossEntropy 损失 但 pytorch 实现不适用于通道明智的
  • 当 PostgreSQL 停止时,TFDConnection.OnRecover 永远不会被触发

    我使用了 Firedac 连接恢复功能 如下所述恢复连接 FireDAC http docwiki embarcadero com RADStudio Rio en Recovering Connection FireDAC Delphi
  • 撤消 IntelliJ 智能结帐

    IntelliJ 有一个理论上非常酷的功能 称为智能结账 https blog jetbrains com idea 2012 03 simpler and more powerful ui for git branches 当您更改分支并
  • 如何在 Ruby 中的 Array 类中对数组的每个元素进行平方?

    我的部分代码如下 class Array def square self map num num 2 self end end 当我打电话时 1 2 3 square 我期望得到 1 4 9 但结果却得到 1 2 3 为什么会这样呢 当我打
  • 获取URL的所有文件夹

    您好 我正在尝试从给定服务器读取所有文件 我想做的事 读取所有文件夹 获取文件夹内的文件 URL 我尝试通过此方法获取服务器的文件夹和文件 但它返回了一个包含 MacBook 文件夹的数组 NSURL directory NSURL URL
  • WebApi 自定义授权属性不起作用

    我需要使用活动目录中的一个或多个特定用户来保护我的 Web api 在 web config 中我有以下代码