ASP.NET Core MVC检查回发授权

塔诺斯79

我认为标题可能有些歪斜,但是,这是我的问题和目标。我正在使用ASP.NET Core 3.1 MVC开发应用程序。我需要限制用户对某些区域,页面等的访问。这已经在Startup.cs文件中完成,并将[Authorize]属性添加到管理控制器中。但是,我似乎无法弄清楚的是:如果管理员在该用户登录时删除了该用户的管理权限,并且他们试图访问受保护的页面,那么如何阻止他们访问该页面?我知道逻辑答案可能是让用户注销并重新登录,但是,在这种情况下,这不是必需的。

文件Startup.cs(代码段)

public void ConfigureServices(IServiceCollection services)
{
    //Configuration
    services.Configure<HHConfig>(Configuration.GetSection("App"));
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer( 
        Configuration.GetConnectionString("DefaultConnection"))); 
    services.AddIdentity<ApplicationUser, IdentityRole>(options =>
    {
        options.Password.RequiredLength = 8;
        options.Password.RequiredUniqueChars = 1;
        options.SignIn.RequireConfirmedAccount = true;
        })
        .AddRoles<IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();            
        services.AddControllersWithViews();
        services.AddRazorPages(options => {
        options.Conventions.AuthorizeFolder("/Administration");
    });

    services.AddMvc().AddRazorPagesOptions(options =>
    {
        options.Conventions.AddAreaPageRoute("Identity", "/Account/Login", "/Account/Login");
    });

    //Transient and Scoped Services Here
    services.AddTransient<ApplicationDbContext>();
    services.AddScoped<IEmailManager, EmailManager>();
}

行政主管

[Authorize(Roles = "Admin")]
public class AdministrationController : Controller
{
    private readonly RoleManager<IdentityRole> roleManager;
    private readonly UserManager<ApplicationUser> userManager;
    private SignInManager<ApplicationUser> signInManager { get; }
    private readonly IEmailManager emailManager;

    public AdministrationController(RoleManager<IdentityRole> roleManager,UserManager<ApplicationUser> userManager,SignInManager<ApplicationUser> signInManager, IEmailManager emailMgr)
    {
        this.roleManager = roleManager;
        this.userManager = userManager;
        this.signInManager = signInManager;
        emailManager = emailMgr;
    }        
}     
DCCoder

您遇到的问题是用户的声明存储在用户浏览器的cookie中。您需要做的是确保在更新用户声明时更新cookie。一种方法是您可以刷新关键页面上的用户登录。

这可以通过以下方法完成:

  1. 注册一个,UserClaimsPrincipalFactory以便每次SignInManager唱歌都会创建声明。

     services.AddScoped<IUserClaimsPrincipalFactory<ApplicationUser>, UserClaimService>();
    
  2. 实施UserClaimsPrincipalFactory<TUser, TRole>如下的自定义

     public class UserClaimService : UserClaimsPrincipalFactory<ApplicationUser, ApplicationRole>
     {
         private readonly ApplicationDbContext _dbContext;
    
         public UserClaimService(ApplicationDbContext dbContext, UserManager<ApplicationUser> userManager, RoleManager<ApplicationRole> roleManager, IOptions<IdentityOptions> optionsAccessor) : base(userManager, roleManager, optionsAccessor)
         {
             _dbContext = dbContext;
         }
    
         public override async Task<ClaimsPrincipal> CreateAsync(ApplicationUser user)
         {
             var principal = await base.CreateAsync(user);
    
             // Get user claims from DB using dbContext
    
             // Add claims
             ((ClaimsIdentity)principal.Identity).AddClaim(new Claim("claimType", "some important claim value"));
    
             return principal;
         }
     }
    
  3. 在您的应用程序的后面,当您更改数据库中的某些内容并希望将其反映给您的已验证并登录的用户时,以下几行代码可以实现此目的:

     var user = await _userManager.GetUserAsync(User);
     await _signInManager.RefreshSignInAsync(user);
    

这将使用户安静地再次登录,而无需他们进行任何交互,并确保向他们显示最新的内容。尽管这不是一个相同的问题,但是在这个问题上还有其他答案可以帮助解决这个问题我必须在哪里为这个答案功劳。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET CheckBox不检查回发而没有怪异的破解

来自分类Dev

Asp.net Core MVC 授权属性不阻塞

来自分类Dev

asp.net core mvc - 未经授权的ajax请求

来自分类Dev

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

来自分类Dev

Asp.net Core MVC 2.1 - 授权设置。——

来自分类Dev

与ASP.NET MVC BeginExecuteCore等效的ASP.NET Core

来自分类Dev

ASP.NET Core MVC视图附件

来自分类Dev

ASP.NET MVC 6(ASP.NET Core或ASP.NET5)中的友好URL

来自分类Dev

ASP.NET Core MVC 和 EF Core 1.1

来自分类Dev

使用 jwt 授权在 Asp.net core 中检查用户验证

来自分类Dev

覆盖ASP.NET Core 1.0 MVC中的全局授权过滤器

来自分类Dev

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

来自分类Dev

在ASP.NET Core 1.0中要求授权

来自分类Dev

ASP.NET Core中的OAuth授权服务

来自分类Dev

基于Asp.Net Core策略的授权以401 Unauthorized结尾

来自分类Dev

在ASP.NET Core的Swagger中使用JWT(授权:承载)

来自分类Dev

ASP.NET Core Web API和角色授权

来自分类Dev

自定义角色的Asp Net Core 3.1授权

来自分类Dev

Asp .Net Core中的访问被索赔授权拒绝

来自分类Dev

覆盖ASP.NET Core 3中的授权策略

来自分类Dev

仅授权 ASP.NET Core 中的某些 Http 方法

来自分类Dev

自己的认证和授权服务器asp net core

来自分类Dev

如何去除cookies asp.net core 授权

来自分类Dev

自定义授权属性asp.net core

来自分类Dev

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

来自分类Dev

检查用户是否在ASP.NET Core中登录

来自分类Dev

ASP.NET CORE Checkbox如何检查为真?

来自分类Dev

在ASP.Net Core中检查令牌过期的性能方法

来自分类Dev

ASP.NET Core API请求的空对象检查

Related 相关文章

热门标签

归档