慢速网络上的asp.net核心Windows身份验证+自己的数据库授权

时间:2020-04-04 12:13:34

标签: c# asp.net-core authorization windows-authentication

情况

我有一个数据库,其中有用户名及其链接的权限和适用的代码。当我提供用户名时,可以将其视为黑盒,它使我的用户权限成为Enumerable个值的enum个值。我需要使用它。

我还有一个 ASP.NET Core 3.1 MVC Web应用程序,该应用程序需要根据这些权限使用 Windows身份验证自定义授权

我想将这些权限存储一分钟(或十分钟),因为网络不可靠,并且每次查询用户的权限都需要很长时间,并且它们不会频繁更改。我无法对速度做任何事情,我必须使用它。

我有一个AuthorizeAttribute实现,其中指定了用户在控制器中执行操作所需的权限列表(枚举值)。

更具体地说,我有一个较旧的 .net框架asp.net MVC应用程序,通过使用自己的自定义主体以及权限列表来解决此问题,并将该主体保存在cookie中

我正在慢慢学习asp.net核心,当我开始阅读其中的授权和认证时,就足以使我从信息过载中解脱出来。

摘要

我有一个需要存储一段时间的用户权限列表,并且不知道该怎么做才能进行我自己的自定义授权。

我目前拥有的东西可能无法在ASP.NET核心MVC应用程序中为我工作,并且在被众多可用选项重载之前找不到可行的选项。

我需要的是以简单的语言(对于白痴)编写的正确方向的推文,以期使我的需求正常工作。

ASP.NET框架MVC中的当前(非理想)解决方案

当前在.net框架asp.net mvc中可以工作的示例,但可能远不理想:

    global.asax中的
  • 覆盖WindowsAuthentication_onAuthenticate,在这里检查是否存在包含用户数据的cookie并验证了用户身份。

    如果用户通过了身份验证,但没有cookie,则创建一个主体(包含用户的权限)并进行序列化并将其加密为FormsAuthenticationTicket到cookie。

  • Application_PostAuthenticateRequest中的
  • 从加密的cookie中获取数据,并将其设置为HttpContext.Current.User中的主体。

  • 然后,authorize属性将采用指定权限的数组,并检查HttpContext.Current.User用户是否拥有这些权限。

有人可以推荐我如何缩小我对可行解决方案(或可行解决方案)的搜索范围吗?

0 个答案:

没有答案