如何保护 Razor Class 库中的控制器
How can I secure Controllers in a Razor Class Library
我已经开发了一些管理功能(EF 逻辑、控制器和 Razor UI 实际上用于审计日志),我已经打包到 Razor Class 库 (RCL) 中并创建了一个 NuGet包裹。我希望这个功能对包的用户可用,但我想让他们控制访问安全。我通常会用一个授权属性来装饰控制器,比如:
[Area("MyAuditLogPackage")]
[Authorize(Roles = "Admin")]
public class AuditLogController : Controller
...
但我不想假定客户端的安全策略和审核日志是敏感数据。
他们可以从我的控制器中派生出自己的控制器,但原始路线仍会在他们的默认区域映射中。
我怎样才能把这个完全控制权交给包客户?
您可以要求使用您的代码的人创建在启动时定义的自定义安全策略,而不是按角色授权。这会导致类似
[Area("MyAuditLogPackage")]
[Authorize(Policy= "AuditControllerPolicy")]
public class AuditLogController : Controller
...
策略方法非常灵活,因此策略可能要求用户具有管理员角色。它还可能要求令牌中存在其他声明,包括自定义声明。查看 Policy-based Authorization in Asp.Net Core。
这种方法为您的 NuGet 包的用户提供了完全的灵活性,但许多人可能会觉得它很麻烦。您可能想 canvas 先听取他们的意见。
我已经开发了一些管理功能(EF 逻辑、控制器和 Razor UI 实际上用于审计日志),我已经打包到 Razor Class 库 (RCL) 中并创建了一个 NuGet包裹。我希望这个功能对包的用户可用,但我想让他们控制访问安全。我通常会用一个授权属性来装饰控制器,比如:
[Area("MyAuditLogPackage")]
[Authorize(Roles = "Admin")]
public class AuditLogController : Controller
...
但我不想假定客户端的安全策略和审核日志是敏感数据。
他们可以从我的控制器中派生出自己的控制器,但原始路线仍会在他们的默认区域映射中。
我怎样才能把这个完全控制权交给包客户?
您可以要求使用您的代码的人创建在启动时定义的自定义安全策略,而不是按角色授权。这会导致类似
[Area("MyAuditLogPackage")]
[Authorize(Policy= "AuditControllerPolicy")]
public class AuditLogController : Controller
...
策略方法非常灵活,因此策略可能要求用户具有管理员角色。它还可能要求令牌中存在其他声明,包括自定义声明。查看 Policy-based Authorization in Asp.Net Core。
这种方法为您的 NuGet 包的用户提供了完全的灵活性,但许多人可能会觉得它很麻烦。您可能想 canvas 先听取他们的意见。