org做后缀的网站,网页游戏排行榜2022前十名最新排名图片,株洲市建设局官方网站,国内四大高端建站公司长话短说#xff1a;上文我们聊了 ASP.NET Core 基于声明的访问控制到底是什么鬼#xff1f;今天我们乘胜追击#xff1a;聊一聊ASP.NET Core 中的身份验证。身份验证是确定用户身份的过程。授权是确定用户是否有权访问资源的过程。1. 万变不离其宗显而易见#xff0c;一个… 长话短说上文我们聊了 ASP.NET Core 基于声明的访问控制到底是什么鬼今天我们乘胜追击聊一聊ASP.NET Core 中的身份验证。身份验证是确定用户身份的过程。授权是确定用户是否有权访问资源的过程。1. 万变不离其宗显而易见一个常规的身份认证用例包括两部分① 对用户进行身份验证② 在未经身份验证的用户试图访问受限资源时作出反应已注册的身份验证处理程序及其配置选项被称为“方案”方案可用作一种机制供用户参考相关处理程序的身份验证、挑战和禁止行为。我们口头上常说的基于cookie认证方案若认证成功go on若认证失败则跳转回登录页面基于基本身份认证BA方案若认证成功go on若认证失败则给浏览器返回WWW-Authenticate标头 浏览器会再次弹出认证窗口。2. ASP.NET Core认证原理在 ASP.NET Core 中身份验证由IAuthenticationService负责身份验证服务会调用已注册的身份验证处理程序来完成与身份验证相关的操作 整个验证过程由认证中间件来串联。一图以蔽之其中有几个关键步骤添加认证方案由配置项AuthenticationSchemeOption、认证处理程序组成。基于Cookie的认证方案可在Options项中可指定登录地址基于基本身份的认证方案可在Options项中指定用户名/密码;认证处理程序 继承AuthenticationHandler类或IAuthenticationHandler接口核心认证函数: 可落地基于声明的访问控制生成绑定了ClaimsPrincipal、Scheme的AuthenticationTicket 无论认证成功/失败函数返回AuthenticateResut对象。挑战(对未认证的用户做出的反应) 例如返回登录页面禁止(对已认证但对特定资源无权访问做出的反应) 例如返回提示字符串以上均为服务注册过程收到请求认证中间件使用IAuthenticationService对HttpContext按照要求的scheme进行认证 实际内部会调用第2步编写的认证处理程序。以上认证原理有一个近身实战ASP.NET Core 实现基本身份验证。源代码如下https://www.cnblogs.com/JulianHuang/p/10345365.html3. ASP.NET Core获取当前用户基于声明的访问控制, 我们会在HttpContext.User属性存储身份信息。 var claims new[] {new Claim(ClaimTypes.NameIdentifier,username),new Claim(ClaimTypes.Name,username),};var identity new ClaimsIdentity(claims, Scheme.Name);var principal new ClaimsPrincipal(identity);Context.User principal;
Web应用程序中获取当前登录用户 有两种代码场合3.1 在控制器中获取当前登录用户控制器是处理请求的 一等公民天生自带HttpContext。直接通过ControllerBase基类中包含的HttpContext属性获取User对象。实际上Razor Page、Razor View、Middleware均包含HttpContext属性/参数 可直接使用。3.2 在服务中获取当前登录用户这个时候服务是作为请求处理中的一个环节并没有直接可用的HttpContext。ASP.NET Core 提供了IHttpContextAccessor能够注入此次请求中的HttpContext对象依赖注入框架的作用。// 下面的用户实体类需要获取当前登录用户借助IHttpContextAccessor注入httpContext
public class UserEntityService : IUserEntityService
{private IHttpContextAccessor _accessor;private readonly IMongoCollectionUserProfile _users;public UserEntityService(IHttpContextAccessor accessor, IDefaultMongoDatabaseProvider databaseProvider){_accessor accessor;_users databaseProvider.GetCollectionUserProfile(CollectionNames.UserProfiles);}public TaskUserProfile GetCurrentUserAsync(){var rawUser this._accessor.HttpContext.User;if (rawUser null){return null;}var filter BuildersUserProfile.Filter.Eq(UserId, rawUser.UserId);return _users.Find(filter).FirstOrDefaultAsync();}
}abp vnext我们不需要区分以上代码场合在Controller或者Application 服务中使用ICurrentUser接口拿到登录用户。旁白个人认为ASP.NET Core身份认证的源代码, 基于现实认知提炼而来让我们惊叹于框架代码的的简洁精炼、层次分明。基于声明的访问控制已成标准ASP.NET Core/abp vnext 均提供了完善的支持。ASP.NET Core端点路由作用原理临近年关修复ASP.NET Core因浏览器内核版本引发的单点登录故障手撕公司SSO登录原理Quartz.net在集群环境下部署任务的姿势ASP.NET Core应用注意这一点CTO会对你刮目相看更多精彩扫码关注 绘图文字均为原创, 觉得有用麻烦三连 ~..~