如何在ASP.NET Core MVC 6中为用户保留策略授权结果?

帕尼耶夫

当前,我有一个简单的自定义策略处理程序,如下所示:

protected override void Handle(AuthorizationContext context, UserPolicyRequirement requirement)
{
    // authorize user against policy requirements
    if (_authorizationTask.AuthorizeUserAgainstPolicy(context.User, requirement))
    {
        // User passed policy req's 
        context.Succeed(requirement);
    }
}

问题是,此授权步骤需要花费很长时间才能执行,但这在网站的许多不同区域中都是必需的。是否有任何现成的机制可以保存/缓存此策略授权的结果,以便每个会话仅执行一次?

我目前正在使用Windows身份验证,如果有帮助的话。

酷卡格琳

如果per session方法没有引起任何问题,则可以Session用来存储用户数据。简单的实现如下所示:

首先,您需要一项服务来从任何商店获取用户数据

public interface IGetUserDataService
{
    <type> GetUserData();
}

我假设有Session配置(请参阅参考资料)和IGetUserDataService实现。

然后,您需要创建一个middleware要处理的Session

public class SessionMiddleware
{
    private readonly RequestDelegate _next;
    private readonly IGetUserDataService _getUserDataService;

    public SessionMiddleware(RequestDelegate next, IGetUserDataService getUserDataService)
    {
        _next = next;
        _getUserDataService = getUserDataService;
    }

    public async Task Invoke(HttpContext context)
    {
        //user data is obtained only once  then is stored in Session
        if (context.Session.Get("UserData") == null)
        {
            context.Session.Set("UserData", getUserDataService.GetData());
        }
        await _next.Invoke(context);
    }
}

//In Startup.cs
app.UseMiddleware<SessionMiddleware>();

最终在处理程序中获取并使用会话数据

public class YourHandler : AuthorizationHandler<YourRequirement>
{
    private readonly IHttpContextAccessor _accessor;
    public YourHandler(IHttpContextAccessor accessor)
    {
        _accessor = accessor;
    }
    protected override void Handle(AuthorizationContext context, PermissionRequirement requirement)
    {
        var userData =(<type>)_accessor.HttpContext.Session.Get("UserData");
        // check
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在ASP.NET MVC 6(ASP.NET Core)中获取returnUrl AccessDeniedPath

来自分类Dev

如何在ASP.NET Core MVC中基于用户表中的字段添加声明?

来自分类Dev

如何在ASP.NET Core 1 MVC 6中模拟IFormFile进行单元/集成测试?

来自分类Dev

如何在ASP.NET MVC 4中为特定的授权用户显示特定的html元素

来自分类Dev

如何在ASP.NET Core中的.cshtml文件中获取当前的MVC区域名称

来自分类Dev

如何在Asp.Net Core MVC中的隐藏表单中确保EntityId的安全性?

来自分类Dev

如何在Asp.Net Core MVC 1.0(aka MVC 6 RC1)中访问会话超时值?

来自分类Dev

如何在ASP.NET Core MVC中启用跨域请求(CORS)

来自分类Dev

如何在ASP .Net Core 3.1 MVC应用程序中调试JavaScript(剃刀视图-* .cshtml)?

来自分类Dev

如何在ASP.NET Core MVC中对RazorViewEngineOptions进行单元测试?

来自分类Dev

如何在ASP.NET Core MVC App中获取DropDownList的选定值

来自分类Dev

如何在Asp.Net.Core Mvc Signalr中建立一对一聊天系统?

来自分类Dev

如何在ASP.NET CORE MVC中覆盖默认的Identity AccessDenied路由

来自分类Dev

如何在ViewComponents的ASP.net MVC Core中显示外部表值

来自分类Dev

如何在asp.net core MVC应用程序中添加页面列表?

来自分类Dev

如何在asp.net mvc core中获取页面路径

来自分类Dev

如何在Asp.net Core MVC(又名Asp.Net 5 RC1)中检查响应cookie?

来自分类Dev

如何从ASP .NET Core MVC 1.0中的视图访问会话

来自分类Dev

asp.net core mvc 中的自定义授权

来自分类Dev

如何在ASP Net Core MVC应用程序中从Azure AD B2C获取用户列表?

来自分类Dev

如何在ASP.NET Core MVC的其他下拉菜单中根据用户选择填充下拉菜单?

来自分类Dev

Identity如何在具有ASP.NET Core MVC 3.1的单个用户帐户的项目模板中工作?

来自分类Dev

如何在 .Net MVC Core 中将枚举显示为 DropDownList

来自分类Dev

在.NET Core MVC中,如何在AuthorizationHandler内访问DbContext?

来自分类Dev

Asp Core MVC 2.1 基于每个用户策略的授权?

来自分类Dev

如何在Asp.Net Core MVC项目中为Swagger文档明确定义API控制器路径

来自分类Dev

如何在ASP.NET Core MVC中自定义Html.DropDownListFor辅助设置名称属性

来自分类Dev

如何在ASP.NET Core 2.2中使用MVC代替剃须刀页面来使用Identity

来自分类Dev

如何在ASP .NET Core中创建Azure AD用户?

Related 相关文章

  1. 1

    如何在ASP.NET MVC 6(ASP.NET Core)中获取returnUrl AccessDeniedPath

  2. 2

    如何在ASP.NET Core MVC中基于用户表中的字段添加声明?

  3. 3

    如何在ASP.NET Core 1 MVC 6中模拟IFormFile进行单元/集成测试?

  4. 4

    如何在ASP.NET MVC 4中为特定的授权用户显示特定的html元素

  5. 5

    如何在ASP.NET Core中的.cshtml文件中获取当前的MVC区域名称

  6. 6

    如何在Asp.Net Core MVC中的隐藏表单中确保EntityId的安全性?

  7. 7

    如何在Asp.Net Core MVC 1.0(aka MVC 6 RC1)中访问会话超时值?

  8. 8

    如何在ASP.NET Core MVC中启用跨域请求(CORS)

  9. 9

    如何在ASP .Net Core 3.1 MVC应用程序中调试JavaScript(剃刀视图-* .cshtml)?

  10. 10

    如何在ASP.NET Core MVC中对RazorViewEngineOptions进行单元测试?

  11. 11

    如何在ASP.NET Core MVC App中获取DropDownList的选定值

  12. 12

    如何在Asp.Net.Core Mvc Signalr中建立一对一聊天系统?

  13. 13

    如何在ASP.NET CORE MVC中覆盖默认的Identity AccessDenied路由

  14. 14

    如何在ViewComponents的ASP.net MVC Core中显示外部表值

  15. 15

    如何在asp.net core MVC应用程序中添加页面列表?

  16. 16

    如何在asp.net mvc core中获取页面路径

  17. 17

    如何在Asp.net Core MVC(又名Asp.Net 5 RC1)中检查响应cookie?

  18. 18

    如何从ASP .NET Core MVC 1.0中的视图访问会话

  19. 19

    asp.net core mvc 中的自定义授权

  20. 20

    如何在ASP Net Core MVC应用程序中从Azure AD B2C获取用户列表?

  21. 21

    如何在ASP.NET Core MVC的其他下拉菜单中根据用户选择填充下拉菜单?

  22. 22

    Identity如何在具有ASP.NET Core MVC 3.1的单个用户帐户的项目模板中工作?

  23. 23

    如何在 .Net MVC Core 中将枚举显示为 DropDownList

  24. 24

    在.NET Core MVC中,如何在AuthorizationHandler内访问DbContext?

  25. 25

    Asp Core MVC 2.1 基于每个用户策略的授权?

  26. 26

    如何在Asp.Net Core MVC项目中为Swagger文档明确定义API控制器路径

  27. 27

    如何在ASP.NET Core MVC中自定义Html.DropDownListFor辅助设置名称属性

  28. 28

    如何在ASP.NET Core 2.2中使用MVC代替剃须刀页面来使用Identity

  29. 29

    如何在ASP .NET Core中创建Azure AD用户?

热门标签

归档