如何实现自定义授权asp.net核心mvc

时间:2020-04-06 18:02:47

标签: c# asp.net-core asp.net-core-mvc asp.net-authorization

因此,这是我的情况:我有一个.net框架黑盒,要求用户角色(我给它提供用户名,并返回权限集合)。

在我的旧.net框架asp.net mvc应用程序中,我使用Windows身份验证,然后覆盖global.asax.cs中的两个事件,并使用包含权限的我自己的主体(以及在构造函数中采用枚举值的authorizeAttribute实现)

  1. 我首先检查用户是否已通过身份验证,以及是否存在具有其权限的cookie(已加密)。如果没有(或已过期),我将从数据库中创建新的主体和加载权限,然后将其加密并保存到Cookie中。

  2. 然后,第二个事件获取cookie(如果存在),并从中获取我的自定义主体,该主体包含权限,并将其用作当前主体。

  3. 然后,如果有权限,那么Authorize属性将仅查询当前的httpcontext,并且我不必每次都调用数据库来获取用户的权限,因为这很耗时(网络很慢)。

现在,我面临着如何在asp.net核心3中实现此挑战。到目前为止,我所读的所有内容都是关于如何复制“每次需要检查某项权限时都需要权限”的方法我不想做的事。

还有另一种方法可以让我做类似于.net框架的asp.net方法(在cookie过期并且用户正在浏览并将其保存在某个地方然后使用它们时,每n分钟加载一次数据),但是在ASP.NET CORE中?

1 个答案:

答案 0 :(得分:0)

您可以通过policies实施基于声明的授权。在应用程序中设置Windows身份验证后,可以在IClaimsTransformation中基于数据库中的用户ID查询角色/权限,并向ClaimsPrincipal声明角色/权限。之后,您可以使用Authorize属性在身份验证后检查特定策略(基于声明)。

您可以单击here以获得代码示例。

相关问题