【问题标题】:How can I secure Controllers in a Razor Class Library如何保护 Razor 类库中的控制器
【发布时间】:2021-03-08 23:20:54
【问题描述】:

我已经开发了一些管理功能(实际上是用于审核日志的 EF 逻辑、控制器和 Razor UI),我已将它们打包到 Razor 类库 (RCL) 中并创建了一个 NuGet 包。我希望软件包的用户可以使用此功能,但我希望允许他们控制访问安全性。我通常会用授权属性来装饰控制器,例如:

[Area("MyAuditLogPackage")]
[Authorize(Roles = "Admin")]
public class AuditLogController : Controller
...

但我不想假设客户的安全策略和审核日志是敏感数据。

他们可以从我的控制器中派生出自己的控制器,但原来的 Route 仍然在他们的默认区域映射中。

我怎样才能将这个完全控制权交给包客户端?

【问题讨论】:

  • 答案不是为您的软件包用户“写一些文档”吗?
  • 没有。好吧,该包将有大量文档:),但我的问题是如何包含控制器,允许他们在他们认为合适的时候保护它,并且不会从我的 RCL 项目中泄漏不安全的控制器?
  • Roles 只是一个字符串。重要的是他们有办法提供一个或多个。例如:Roles.All。更好的方法可能是提供一个策略名称,这样他们就可以定义自定义逻辑。他们可以用你的名字注册他们的政策,你的控制器会取走它。

标签: c# asp.net-core razor


【解决方案1】:

您可以要求使用您的代码的人创建在启动时定义的自定义安全策略,而不是通过角色进行授权。这将导致类似

[Area("MyAuditLogPackage")]
[Authorize(Policy= "AuditControllerPolicy")]
public class AuditLogController : Controller
...

策略方法非常灵活,因此该策略可能要求用户具有管理员角色。它还可能要求令牌中存在其他声明,包括自定义声明。查看Policy-based Authorization in Asp.Net Core

这种方法为 NuGet 包的用户提供了完全的灵活性,但许多人可能会觉得它很麻烦。您可能想先征求一些意见以征求他们的意见。

【讨论】:

  • GlennSills,这是要走的路。是的,这对用户来说会有些痛苦,但我将提供文档和示例,说明他们如何将角色连接到安全策略中,这将是大多数人想要做的。谢谢!
猜你喜欢
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
  • 2014-02-13
  • 2017-09-19
  • 1970-01-01
相关资源
最近更新 更多