当前位置:首页 > Web开发 > 正文

如默认身份验证方案为JwtBeaerToken时也有效

2024-03-31 Web开发

上两篇(asp.net core 3.x 身份验证-1涉及到的观点asp.net core 3.x 身份验证-2启动阶段的配置)介绍了身份验证相关观点以及启动阶段的配置,本篇以cookie身份验证为例来大抵说明asp.net core中的身份验证道理。如果我们的应用只考虑浏览器使用,且不考虑前后端疏散,cookie是最简单的身份验证方法。虽然这样定名,但我们的用户标识并非必然要存到cookie里,asp.net core允许我们存储到任何处所,如:session、自界说基于内存的存储、redis等等。身份验证与asp.net core Identity结合会更简单,它供给了用户打点成果,以及更身份验证相关的帮助类,如:SignManager,不过暂时不将这东东。

还是以宏不雅观上的理解和使用为主。主要涉及如下流程:

未登录时请求受掩护的资源

登录

已登录时访谒受掩护的资源

注销

此中法式1、3分歧很小。总体流程大抵如下图:

技术图片

先在Startup中做如下配置:

1 public void ConfigureServices(IServiceCollection services) 2 { 3 services.AddAuthentication().AddCookie(); 4 services.AddControllersWithViews(); 5 } 6 7 // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 8 public void Configure(IApplicationBuilder app, IWebHostEnvironment env) 9 { 10 if (env.IsDevelopment()) 11 { 12 app.UseDeveloperExceptionPage(); 13 } 14 else 15 { 16 app.UseExceptionHandler("/Home/Error"); 17 } 18 app.UseStaticFiles(); 19 20 app.UseRouting(); 21 app.UseAuthentication(); 22 app.UseAuthorization(); 23 24 app.UseEndpoints(endpoints => 25 { 26 endpoints.MapControllerRoute( 27 name: "default", 28 pattern: "{controller=Home}/{action=Index}/{id?}"); 29 }); 30 }

View Code

流程1、3、访谒受掩护的资源

当我们在Startup.Configre中 app.UseAuthentication(); 将注册身份验证中间AuthenticationMiddleware,它卖力在请求阶段测验考试从请求中获取用户标识,若获取到则赋值给HttpContext.User属性,否则以匿名用户身份继续执行下一其中间件。

AuthenticationMiddleware

流程大抵如下:

遍历措施中所有实现IAuthenticationRequestHandler身份验证措置惩罚惩罚器,挪用其HandleRequestAsync要领,,此要领若返回true则终止本次请求

通过AuthenticationSchemeProvider获取默认身份验证方案

挪用httpContext.AuthenticateAsync(默认方案名)测验考试从请求中获取当前用户

如果前一步获取到用户,则设置到httpContext.User属性上

无论是否告成获取用户请求城市进入下一其中间件继续后续执行

法式1中允许AuthenticationHandler在特定情况下终止请求,如果我们将来自界说AuthenticationHandler时实现IAuthenticationRequestHandler可以到达这种目的
法式3是核心,httpContext.AuthenticateAsync是扩展要领,内部从IOC容器中获取AuthenticationService并挪用其同名要领

疑惑:AuthenticationMiddleware始终获取默认身份验证方案然后测验考试从请求中获取用户标识,这个默认是通过Startup.ConfigreService中 services.AddAuthentication(默认方案名) 来配置的。但一个系统中可以注册多个身份验证方案(如:同时撑持Cookie和JWTBearerToken方法),所以咋措置惩罚惩罚呢?我目前能想到的是要么纯网站直接用cookie,前后端疏散或移动端app默认方案设置为JWTBearerToken;另一种方法再自界说一个AuthenticationMiddleware;但是觉得都很别扭,所以你有好的想法请指教下,不胜谢谢!

AuthenticationService.AuthenticateAsync

大抵执行如下法式:

通过AuthenticationHandlerProvider(注入进来的)获取指定(这里就是默认的)身份验证方案名获取关联的身份验证措置惩罚惩罚器AuthenticationHandler

挪用AuthenticationHandler.AuthenticateAsync()测验考试从请求中获取用户

返回前测验考试将用户标识转换成另一个用户标识(且进行缓存,由于AuthenticationService是Scope注册的,所以没问题)

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/web/30126.html