在ASP.NET Core中,使用自定义验证属性来控制访问权限是一种灵活且强大的方法,这种方式可以确保只有经过认证的客户端应用(通过OAuth2的AccessToken)才能访问受控的Web API站点,以下是详细的步骤和代码示例:
一、配置Startup.cs文件
需要在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
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复