问题标签 [authorize-attribute]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2401 浏览

asp.net-mvc - MVC3 中的 OutputCache 和 Authorize 过滤器

我正在阅读一本关于 MVC2 的书,在 OutputCache 部分中它指出:

警告 在前面的“授权过滤器如何与输出缓存交互”部分中,我解释说 [Authorize] 具有特殊行为,可确保未经授权的访问者无法仅因为敏感信息已被缓存而获得敏感信息。但是,除非您特别阻止它,否则缓存的输出仍有可能传递给与最初生成该输出的授权用户不同的授权用户。防止这种情况的一种方法是将特定内容项的访问控制实现为授权过滤器(从 AuthorizeAttribute 派生),而不是简单地在操作方法中内联实施授权逻辑,因为 AuthorizeAttribute 知道如何避免被输出缓存绕过。仔细测试以确保授权和输出缓存以您期望的方式交互。

这在 MVC3 中仍然成立吗?

如果是肯定的,有什么方法可以防止这种情况发生?(因为书上的解释太模糊了)。

问候。

0 投票
2 回答
2921 浏览

asp.net-mvc-3 - 授权属性不起作用

我想添加一个简单的登录。因此,我认为最好的方法是将凭据添加到数据库中,然后查询该凭据以及您是否登录了用户名和密码。这是有效的,它会查询数据库,然后您会登录并重定向到家。然后我尝试通过 url 访问 home 并注意到我可以在不登录的情况下做到这一点。所以我想我应该使用

Home Controller 上的属性,因为我不希望未经授权的用户访问它,因此应该将其重定向回登录页面。这不起作用。当我在控制器上使用授权时,我在应用程序中收到错误。

在 web.config 中,它看起来像这样:

我的登录控制器是这样的。

那么如何正确使用这个 Authorize 属性呢?我什至可以按照我使用它的方式使用它吗?我在 web.config 中遗漏了什么吗?问候!

对此进行了一些更新。由于它不起作用,我将其添加到 web.config 中:

以及具有硬编码凭据的会员提供者:

然后我尝试用这样的 Authorization 属性装饰我的 HomeController:

但仍然得到同样的错误。我的意思是我可以登录,但是当我到达“主页”时,我得到了和以前一样的错误。这到底是什么名字?!这有什么线索吗?!

问候!

0 投票
1 回答
606 浏览

asp.net-mvc-3 - MVC3 授权:从另一个动作调用授权动作是不是不好的形式?

RedirectToAction从另一个动作调用控制器动作时是否需要使用?我目前只是直接调用它们,因为我不希望它们返回,因此我绕过 Authorize 标记到我的一个操作(它执行我想要的操作)。

您能否让我知道这是否是错误的形式,如果是,我应该创建多个新操作来设置客户端 cookie 还是直接在LogOn()操作中设置它们?

我可以改为SwitchClient私有,然后公开授权操作,仅供客户端管理员使用吗?然后,将通过该操作调用私有操作LogOn,但除非用户通过管理员身份验证,否则无法访问该操作。

这是我的代码:

0 投票
2 回答
1262 浏览

asp.net-mvc-3 - 有没有办法注册全局过滤器,但排除 JsonResult 请求?

我已经定义了一个自定义授权属性。为了避免在我的控制器中的每个 ActionResult 上方列出该属性,我已将该属性添加到我的 global.asax 中,如下所示:

然而,这样做的一个意想不到的后果是,在我的所有 JsonResult 调用期间,我的授权代码也会被调用。有没有办法让 MyAuthorizeAttribute 只在 ActionResult 调用上而不是在 JsonResult 调用上被调用?我正在使用 MVC3。

0 投票
1 回答
1953 浏览

asp.net-mvc-3 - 模拟 Authorize 属性的存在

我想知道如何模拟控制器在 MVC3 中使用 [Authorize] 属性进行装饰?我正在使用自定义会员提供程序。我想测试一个控制器是否装饰有该属性并且您被授权以及当您没有被授权时会发生什么。我正在使用起订量。这有什么好的建议吗?!

更新:我目前收到 NullreferenceException 说“对象引用未设置为对象的实例”。在使用授权属性时,这与之前在这篇文章 NullReferenceException中提到的错误相同

这与 Authorize 属性有关。我在 iis 下运行,而不是使用 cassini。有谁知道这是否与应用程序池和用户权限有关。在修复此问题之前,我对授权属性进行的测试将不起作用。

也许还有其他测试 Authorize 属性的方法?提前非常感谢。

UPDATE2 因此,在一位同事的广泛研究和调试帮助后,我提到要解决 [Authorize] 属性的问题。看起来好像 web.config 中的这一行丢失了:

奇怪的是,这并没有给另一个共享主干或处于测试环境的同事带来问题。它只在本地给我带来了问题。这可能与 GAC 中的某些内容有关。无论如何,现在一切正常。

谢谢。

0 投票
1 回答
10430 浏览

c# - ASP.NET MVC Global or BaseController ActionFilter to Execute Before OnAuthorization

In my application (ASP.NET MVC 3) I have a BaseController class that all my Controllers inherit and in that BaseController I have overridden the OnActionExecuting method to check to ensure a Session variable is populated as I need access to that in all other action methods in the application. I also have a custom Authorize attribute that I have defined that extends the AuthorizeAttributeClass. In that attribute I override OnAuthorization to check the same Session variable I am loading in the BaseController OnActionExecuting method to see if the user should be permitted to continue.

BaseController

Custom Authorize Attribute

The problem is that the BaseController OnActionExecuting method is firing AFTER the OnAuthorization method in my AuthorizeByPermission attribute and I need it to be the other way arround as the BaseController needs to popualte the Session variable if it isn't there before the authorize attribute attempts to access it.

Basically I need to find a way to have a base class method or a global filter that can be registered to occur before the OnAuthorization method fires. Any ideas on how to do this?

I have tried registering a GlobalFilter to load the session variable and set its Order property to be lower than the AuthorizeByPermission attribute but that didn't seem to work either.

I have also tried overriding the Execute method in the BaseController and that actually fired before the custom authorization attribute but the problem was that I didn't have access to the filterContext which allowed me to redirect the user to the SignIn page if we couldn't load the session variable.

As per bmosh's comment I tried turning my BaseController OnActionExecuting method into a separate filter and decorate the BaseController with that attribute with a lower Order number than the AuthorizeByPermission attribute but it still didn't work.

Even with the above setup, the AuthorizeByPermission attribute is fired first.

Any ideas?

0 投票
1 回答
110 浏览

asp.net - 更改 AuthorizeAttribute 过滤器中的操作

如果用户无权执行某个操作,在 中HandleUnauthorizedRequest,我将用户重定向到错误操作。这会导致 302 错误。

例如从/Home/Index,用户将被带到/Error/Unauthorized

而不是重定向,我如何更改ActionResultinfilterContext.Response以便用户在没有重定向的情况下看到未经授权的页面?

0 投票
1 回答
1004 浏览

asp.net-mvc - AuthorizeAttribute MVC - 限制对用户创建的内容的访问

所以我读到了如何实现你自己的授权例程是不好的!

http://www.nashcoding.com/2011/02/05/using-the-forms-authentication-membership-provider-on-appharbor/

我很害怕,因为我一直在执行我的操作(例如,如果经过身份验证的用户不是登录用户,则阻止访问帐户详细信息)

这显然意味着如果 ASP 决定缓存我的操作(因此该操作甚至不会被执行),它将中断。

所以我现在正在研究使用 AuthorizeAttribute 来做我需要做的事情,即

  • 如果未通过身份验证,则阻止对操作的访问
  • 检查经过身份验证的用户是否有权访问检索到的资源

但是,每当我想到它时,我都无法考虑如何实施第二点。角色不起作用,因为它在站点范围内,但在应用程序中,用户也有角色(例如所有者、主持人、贡献者、用户等),并且他们仅在应用程序的各自部分中具有这些角色(例如线程的所有者、wiki 的贡献者、论坛的版主等)

我遇到了几个覆盖 AuthorizeCore 的例子。我可以想象为我拥有的每个资源创建多个 AuthorizeAttribute 子类(幸运的是不是很多),但是仅仅通过查看它,这是否意味着我每次点击该操作时都必须查询数据库以确保登录用户应该是能够访问该数据,然后在我的操作中查询数据库以获取模型,而不是在我的查询中这样做?

所以我的问题是

  • 我是否太担心缓存太多?是否会发生以下任何情况
    • 网站缓存用户 A 的详细信息,在用户 B 的屏幕上呈现?
    • 网站缓存页面的管理员版本(带有编辑控件),普通用户看到缓存版本?
  • 使用 AuthorizeAttribute 是给定的,但是如何在第 2 点中实现我需要做的事情,而不必在操作之前访问数据库?或者在任何情况下实现它的最佳方法是什么。
  • 还是我只使用 AuthorizeAttribute 来确定用户是否已登录,并在我的操作中执行其他检查逻辑?

无论如何,我希望这篇文章没有走上任何老路(我找不到任何我认为明确的东西)


编辑:我想,如果我不启用缓存,这个问题就不会发生,这是正确的吗?


编辑:现在,我将使用 vanilla AuthorizeAttribute,然后检查我的操作中的资源级别访问,然后确保我不对任何经过身份验证的操作使用缓存。希望这周能得到更多的答案。

0 投票
3 回答
22056 浏览

asp.net-mvc - 动作过滤器执行顺序

我创建了两个实现AuthorizeAttribute.

一个是全局使用的,我在 Global.asax.cs 上设置:

另一个被调用SecondAuthorizeAttribute,它只在一些动作方法中使用,我将它用作我想要的方法中的属性。

问题是SecondAuthorizeAttribute总是先执行FirstAuthorizeAttribute,我需要先执行这个。订单没有帮助,我该怎么办?

0 投票
2 回答
2269 浏览

asp.net-mvc - ASP.Net MVC 3:反向授权属性

我有一个简单的 ASP.Net MVC 3 应用程序,它有一些控制器和一些很好的操作。

现在,由于这是一个基于用户的应用程序,大多数控制器操作都需要对用户进行身份验证。MVC 使用内置的 Authorize 属性很好地处理了这个问题,您可以使用它来单独装饰控制器和/或操作。

最棒的是您可以将属性仅应用于控制器,并且该给定控制器的所有操作也将应用它 - 节省了大量输入;)

但我有一个控制器,可以说,10 个动作。但我希望其中一项操作不应用 Authorize 属性。

是的,我可以将该属性应用于其他 9 个并将其从控制器中删除,这将完全满足我的需要。但是有没有办法让它应用到控制器并选择排除其中一个动作?

实际上,想要类似...

[!Authorize]或者[NotAuthorize]

我知道我可以创建一个自定义的来完成这项工作,但我想知道是否有内置的方法可以做到这一点?还是我必须将该属性应用于所有其他 9 个操作?