📜  asp.net 核心授权默认策略 - C# (1)

📅  最后修改于: 2023-12-03 14:59:24.502000             🧑  作者: Mango

ASP.NET Core 授权默认策略 - C#

ASP.NET Core 是一个开源的 Web 框架,用于构建现代 Web 应用程序。其具有灵活的架构和丰富的库,可供开发人员使用。其中一个主要功能是授权和身份验证,提供安全和可靠的用户管理。本文将介绍 ASP.NET Core 中的授权默认策略及其使用方法。

授权默认策略

ASP.NET Core 中的授权默认策略是一组规则,用于定义哪些用户可以访问应用程序中的哪些部分。这些规则通常基于用户身份、角色和声明。授权默认策略还允许开发人员定义自定义规则并将其与默认规则组合使用。

默认情况下,ASP.NET Core 中的授权默认策略使用 Role-based 访问控制 (RBAC)。这意味着开发人员可以为应用程序中的每个部分定义角色,然后将用户分配到相应的角色。然后,只有那些分配到相应角色的用户才能访问该部分。

除了RBAC外,ASP.NET Core 中的授权默认策略还支持基于声明的访问控制(ABAC),其中规则基于用户声明而不是角色。在这种情况下,开发人员可以在用户登录时添加声明,然后使用默认策略定义规则,使只有具有特定声明的用户才能访问特定区域。

使用授权默认策略

要使用 ASP.NET Core 中的授权默认策略,请先在 Startup.cs 文件中启用授权中间件:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication("CookieScheme")
        .AddCookie("CookieScheme", options =>
        {
            options.LoginPath = "/Account/Login";
            options.AccessDeniedPath = "/Account/AccessDenied";
        });
    services.AddAuthorization(options =>
    {
        options.AddPolicy("RequireAdministratorRole", policy =>
            policy.RequireRole("Administrator"));
    });
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();
    ...
}

其中,AddAuthentication 方法指定了身份验证方案和选项。AddCookie 方法启用 Cookie 认证,LoginPath 指定了验证失败后登录页面的 URL,AccessDeniedPath 指定了未授权访问时的 URL。

AddAuthorization 方法启用授权功能,并定义了一个名为 "RequireAdministratorRole" 的策略。该策略要求用户具有 "Administrator" 角色才能访问受保护的部分。

现在,您可以在控制器或操作方法中使用授权默认策略:

[Authorize("RequireAdministratorRole")]
public IActionResult AdministratorOnly()
{
    ...
}

此代码将限制只有具有 "RequireAdministratorRole" 策略的用户才能访问该操作。

自定义策略

ASP.NET Core 中的授权默认策略还允许开发人员定义自定义规则和策略。要做到这一点,请创建自定义授权要求和处理程序:

public class AgeRequirement : IAuthorizationRequirement
{
    public int Age { get; }

    public AgeRequirement(int age)
    {
        Age = age;
    }
}

public class AgeHandler : AuthorizationHandler<AgeRequirement>
{
    protected override Task HandleRequirementAsync(
        AuthorizationHandlerContext context, AgeRequirement requirement)
    {
        var claim = context.User.FindFirst(c => c.Type == "Age");
        if (claim != null && int.TryParse(claim.Value, out int age))
        {
            if (age >= requirement.Age)
            {
                context.Succeed(requirement);
            }
        }

        return Task.CompletedTask;
    }
}

上述代码定义了一个要求和处理程序,要求用户的年龄大于等于一个指定的值。

然后,您可以在 AddAuthorization 方法中添加自定义策略:

services.AddAuthorization(options =>
{
    options.AddPolicy("RequireAge", policy =>
        policy.Requirements.Add(new AgeRequirement(18)));
});

services.AddSingleton<IAuthorizationHandler, AgeHandler>();

此代码将设置一个名为 "RequireAge" 的策略,并将 AgeHandler 注册为处理程序。

现在,您可以在控制器或操作方法中使用自定义策略:

[Authorize("RequireAge")]
public IActionResult AdultOnly()
{
    ...
}
结论

ASP.NET Core 中的授权默认策略是一个强大的功能,可用于安全地管理用户访问。它支持角色和声明基础访问控制,并允许开发人员定义自定义规则和策略。在使用授权默认策略时,一定要小心细心地设置和测试策略,以确保安全和可靠性。