如何在ASP.NET Core中使用自定义验证属性来控制访问权限?

ASP.NET Core 使用自定义验证属性,通过继承 AuthorizeAttributeActionFilterAttribute,实现细粒度的权限控制。

ASP.NET Core中,使用自定义验证属性来控制访问权限是一种灵活且强大的方法,这种方式可以确保只有经过认证的客户端应用(通过OAuth2的AccessToken)才能访问受控的Web API站点,以下是详细的步骤和代码示例:

一、配置Startup.cs文件

ASP.NET Core使用自定义验证属性控制访问权限详解

需要在Startup.cs文件中配置CORS(跨源资源共享),以允许来自特定源的跨域请求,这通常在ConfigureServices方法中完成,通过AddCors方法添加策略。

public void ConfigureServices(IServiceCollection services)
{
    services.AddCors(options =>
    {
        options.AddPolicy("AllowOriginOtherBis", builder =>
            builder.WithOrigins(
                "https://1.16.9.12:4432",
                "https://pc12.ato.biz:4432",
                "https://localhost:44384",
                "https://1.16.9.12:4432",
                "https://pc12.ato.biz:4432")
            .AllowAnyMethod()
            .AllowAnyHeader());
    });
    // 启用自定义属性以便对控制器或Action进行[TerminalApp()]定义。
    services.AddSingleton<IAuthorizationHandler, TerminalAppAuthorizationHandler>();
    services.AddAuthorization(options =>
    {
        options.AddPolicy("TerminalApp", policyBuilder =>
        {
            policyBuilder.Requirements.Add(new TerminalAppAuthorizationRequirement());
        });
    });
}

二、实现自定义授权处理程序

需要创建一个实现了IAuthorizationHandler接口的类,比如TerminalAppAuthorizationHandler,并在服务注册时注入,以便处理自定义验证要求。

public class TerminalAppAuthorizationHandler : IAuthorizationHandler
{
    public Task HandleRequirementAsync(AuthorizationHandlerContext context, TerminalAppAuthorizationRequirement requirement)
    {
        // 在这里实现你的验证逻辑,比如检查Token是否有效或者与已知终端应用关联。
        // 如果验证通过,调用context.Succeed(requirement);
        // 如果验证失败,调用context.Fail();
        // 示例代码(实际实现应根据具体需求编写)
        var token = context.User?.Claims?.FirstOrDefault(c => c.Type == "token");
        if (token != null && token.Value == "expected-token-value")
        {
            context.Succeed(requirement);
        }
        else
        {
            context.Fail();
        }
        return Task.CompletedTask;
    }
}

三、创建自定义授权要求

还需要创建一个自定义的授权要求类,比如TerminalAppAuthorizationRequirement,它实现了IAuthorizationRequirement接口。

public class TerminalAppAuthorizationRequirement : IAuthorizationRequirement
{
}

四、应用自定义授权策略

在控制器或动作方法上应用自定义的授权属性,比如[Authorize(Policy = "TerminalApp")],并在这个策略中添加自定义验证要求。

[ApiController]
[Route("[controller]")]
public class MyController : ControllerBase
{
    [HttpGet]
    [Authorize(Policy = "TerminalApp")]
    public IActionResult Get()
    {
        return Ok("This action is accessible only to authorized clients.");
    }
}

五、配置HTTPS重定向和CORS中间件

Configure方法中,调用app.UseHttpsRedirection()以确保所有通信都是通过HTTPS进行,并且配置其他中间件,如身份验证和授权处理。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
        app.UseHsts();
    }
    app.UseHttpsRedirection();
    app.UseRouting();
    app.UseCors("AllowOriginOtherBis"); // 根据定义启用跨域设置
    app.UseAuthentication();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

通过以上步骤,你可以在ASP.NET Core应用中配置CORS和自定义验证属性来有效地控制哪些客户端应用可以访问你的Web API,这是一种灵活的方法,可以根据项目需求定制验证规则,确保数据的安全性和应用的可控性,如果你在实际开发中遇到类似场景,可以参考本文提供的步骤和代码示例来实现。

到此,以上就是小编对于“ASP.NET Core使用自定义验证属性控制访问权限详解”的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位朋友在评论区讨论,给我留言。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1368877.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希新媒体运营
上一篇 2024-12-01 01:35
下一篇 2024-12-01 01:39

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入