具有基于自定义角色的授权的ASP.Net Core 3.0 Windows身份验证

我正在寻找在ASP.NET 3.0 MVC应用程序中使用Windows身份验证的角色,这些角色是我从SQL数据库中提取的用于API安全性的角色。我将用[Authorize(Roles = "Admin")]

这样的东西装饰API控制器方法

我在这里拥有很多东西,我是从这个网站上挑选的,但我只停留在最后一部分。 我可以看到该角色已应用于用户,但无法获得授权才能工作。

为此,我首先从ClaimsTransformer开始,它将用于通过声明将角色应用于我的用户。

ClaimsTransformer.cs

    public async Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
    {
        //This sample will automatically apply the Admin role to the user
        //In the real app,I will check the user against my DB and apply all roles (as claims) here
        var ci = (ClaimsIdentity)principal.Identity;
        var c = new Claim(ci.RoleclaimType,"Admin");
        ci.AddClaim(c);

        return await Task.FromResult(principal);
    }

Startup.cs-ConfigureServices

public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews();

        //Register the ClaimsTransformer here
        services.AddSingleton<IClaimsTransformation,ClaimsTransformer>();

        //Use windows authentication
        services.AddAuthentication(IISDefaults.AuthenticationScheme);
        services.AddAuthorization();
    }

Starup.cs-配置

public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
    {
        app.UseHttpsRedirection();
        app.UseStaticfiles();

        app.UseRouting();

        app.UseAuthorization();
        app.UseAuthentication();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }

DataController.cs

在API控制器中,我可以像这样设置未经授权的方法,并在检查User.IsInRole(“ Admin”);时看到显示为true的结果。

    [HttpGet]   
    public async Task<IactionResult> GetData1()
    {
        var result = User.IsInRole("Admin");

        return Ok(result);
    }

但是,如果我像这样用[Authorize(Roles = "Admin")]装饰控制器方法,则在对该方法的调用上会收到禁止响应。

    [HttpGet]       
    [Authorize(Roles = "Admin")]
    public async Task<IactionResult> GetData1()
    {
        var result = User.IsInRole("Admin");

        return Ok(result);
    }
chensiduan 回答:具有基于自定义角色的授权的ASP.Net Core 3.0 Windows身份验证

在这种情况下,这是一个很小但常见的切换线路错误,the orderUseAuthentication(用户),然后是UseAuthorization(允许用户执行的操作)。这就解释了为什么授权不起作用。

本文链接:https://www.f2er.com/3114776.html

大家都在问