gpt4 book ai didi

c# - Authorize 和 AllowAnonymous 元数据在应用于 Controller 时会给出不同的行为

转载 作者:行者123 更新时间:2023-12-03 18:56:18 25 4
gpt4 key购买 nike

当我应用这段代码时授权 Controller 方法和 AllowAnonymous在里面的一种操作方法上,所有操作方法都将被授权,除了上面有 AllowAnonymous 元数据的方法。显然,操作方法元数据覆盖了 Controller 方法的元数据

[Authorize]
public class HomeController : Controller
{

public ActionResult About()
{
ViewBag.Message = "Your application description page.";

return View();
}

[AllowAnonymous]
public string Method1()
{
return "The secure method";
}

}

但是当我在 Controller 方法上使用 [AllowAnonymous] 尝试相反的操作时并在操作方法上使用 [Authorize] 元数据那么带有[Authorize]的 Action 方法将不会被AUTHORIZED

为什么行为不同?

[AllowAnonymous]
public class HomeController : Controller
{

public ActionResult About()
{
ViewBag.Message = "Your application description page.";

return View();
}

[Authorize]
public string Method1()
{
return "The secure method";
}

}

最佳答案

[AllowAnonymous] 属性专门用于将 Controller 或 Controller 上的操作列入白名单。当您的资源受到应用于 Controller 或全局的整个 Web 应用程序的 [Authorize] 属性限制时,当您想要从字面上绕过授权以允许匿名访问资源时使用它.

这在 the Micosoft docs for the AllowAnonymousAttribute 中有描述:

Specifies that actions and controllers are skipped by AuthorizeAttribute during authorization.

此功能也记录在 docs for the AuthorizeAttribute 中在备注部分下:

You can declare multiple AuthorizeAttribute per action. You can also use AllowAnonymousAttribute to disable authorization for a specific action.

因此,在您的问题中的两个编码示例中,您的操作 Method1 都应用了 action 属性并应用了 controller inherited 属性,因此您的两个示例与执行此操作完全相同:

[AllowAnonymous]
[Authorize]
public string Method1()
{
return "The secure method";
}

正如 Microsoft 文档中所述,仅在该操作上具有 [AllowAnonymous] 指定该操作被 AuthorizeAttribute 跳过,即使已声明 Authorize 属性在行动上也是如此。这是因为我之前说过,[AllowAnonymous] 属性的目的是将资源列入白名单并绕过授权,因此在您的两个编码示例中,[AllowAnonymous] 属性通过允许匿名访问您的操作而完全按预期工作,即使它也被声明为已授权。

关于c# - Authorize 和 AllowAnonymous 元数据在应用于 Controller 时会给出不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59575947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com