大家好我又回来了,前几天讲过一个关于Jwt的身份验证最简单的案例,但是功能还是不够强大,不适用于真正的项目,是的,在真正面对复杂而又苛刻的客户中,我们会不知所措,就现在需要将认证授权这一块也变的复杂而又实用起来,那在专业术语中就叫做自定义策略的API认证,本次案例运行在.NET Core 3.0中,最后我们将在swagger中进行浏览,来尝试项目是否正常,对于.NET Core 2.x 版本,这篇文章有些代码不适用,但我会在文中说明。
二.在.NET Core中尝试我们都知道Jwt是为了认证,微软给我们提供了进城打鬼子的城门,那就是 AuthorizationHandler ,它就是认证模块,我们只需要实现它,基本上就可以实现了自定义策略的认证。
我们首先要实现它,并且我们还可以根据依赖注入的 AuthorizationHandlerContext 来获取上下文,就这样我们就更可以做一些权限的手脚。
public class PolicyHandler : AuthorizationHandler<PolicyRequirement> { protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PolicyRequirement requirement) { var http = (context.Resource as Microsoft.AspNetCore.Routing.RouteEndpoint); var questUrl = "http://www.likecs.com/"+http.RoutePattern.RawText; //赋值用户权限 var userPermissions = requirement.UserPermissions; //是否经过验证 var isAuthenticated = context.User.Identity.IsAuthenticated; if (isAuthenticated) { if (userPermissions.Any(u=>u.Url == questUrl)) { //用户名 var userName = context.User.Claims.SingleOrDefault(s => s.Type == ClaimTypes.NameIdentifier).Value; if (userPermissions.Any(w => w.UserName == userName)) { context.Succeed(requirement); } } } return Task.CompletedTask; } }