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

马达沃拉

我希望在ASP.NET 3.0 MVC应用程序中使用Windows身份验证,并从SQL数据库中提取角色以实现API安全。我将用类似的东西装饰API控制器方法[Authorize(Roles = "Admin")]

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

为此,我首先从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);
    }
范·埃尔伯格(Ruard van Elburg)

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

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有Windows身份验证的ASP.NET Core 2.1自定义RoleProvider

.NET Core 3 Azure AD身份验证的自定义角色

ASP.NET Core使用具有Cookie身份验证的自定义身份验证处理程序

具有自定义身份验证类型的ASP.NET Core JWT

ASP.NET Core禁用Windows身份验证

ASP.NET Core 3.1的自定义身份验证处理程序的授权失败?

具有Windows身份验证的ASP.NET Core身份

ASP.NET Core 2-身份-具有自定义角色的DI错误

与自定义身份验证中的角色权限相比,ASP.NET Core Identity中的角色声明

在ASP.NET Core应用中同时启用Windows身份验证和匿名身份验证

JWT和Windows身份验证的ASP.Net Core 2.0混合身份验证不接受凭据

.Net Core 3.1自定义身份验证

使用Windows身份验证的Intranet应用是否需要ASP.NET Core身份

如何在ASP.NET Core中向Windows身份验证添加角色

ASP.NET Core Windows身份验证和应用程序角色

Auth0 与 .Net Core ASP MVC 到 WebAPI 身份验证

具有ASP.NET Core身份的Web API的IdentityServer4基于角色的授权

具有身份和ExternalLogin的ASP.NET Core 3.1中基于角色的授权

.Net Core Web API的Auth0身份验证

带有 Windows 身份验证的 ASP.NET Core 总是给出 403

使用Blazor 0.9.0和ASP.NET Core 3的JWT身份验证预览4

ASP.Net Core 5.0 身份验证和授权

具有可选身份验证/授权的ASP.NET Core

Windows身份验证的ASP.NET 5自定义角色

具有IdentityServer4,Asp.Net Core身份和不带实体框架的自定义提供程序的Blazor WebAssembly身份验证

使用.Net Core中的Windows经过身份验证的应用程序填充来自SQL的自定义声明

ASP.NET Core 1.1-使用“登录”屏幕的Windows身份验证(MVC视图)

ASP.NET Core Windows 身份验证从 UI 网站传递到 API

ASP.NET Core JWT / Windows身份验证HTTP 400错误