asp.net core3.1cookie和jwt混合认证授权实现多种身份(2)

[HttpPost] public async Task<NewtonsoftJsonResult> LoginIn(string userName, string userPassword, string code) { AjaxResult objAjaxResult = new AjaxResult(); var user = _userBll.GetUser(userName, userPassword); if (user == null) { objAjaxResult.Result = DoResult.NoAuthorization; objAjaxResult.PromptMsg = "用户名或密码错误"; } else { var claims = new List<Claim> { new Claim("userName", userName), new Claim("userID",user.Id.ToString()), }; await HttpContext.SignInAsync(new ClaimsPrincipal(new ClaimsIdentity(claims,CookieAuthenticationDefaults.AuthenticationScheme))); objAjaxResult.Result = DoResult.Success; objAjaxResult.PromptMsg = "登录成功"; } return new NewtonsoftJsonResult(objAjaxResult); }

jwt认证

[HttpPost] public NewtonsoftJsonResult Token([FromBody] UserInfo model) { AjaxResult objAjaxResult = new AjaxResult(); var user = _userBll.GetUser(model.UserName, model.Password); if (user == null) { objAjaxResult.Result = DoResult.NoAuthorization; objAjaxResult.PromptMsg = "用户名或密码错误"; } else { //jwtTokenOptions 是通过配置获取上面配置的参数信息 var jwtTokenOptions = BaseConfigModel.jwtConfig; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtTokenOptions.SigningKey)); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); //身份 var claims = new List<Claim> { new Claim("userID",user.Id.ToString()), new Claim("userName",user.UserName), }; //令牌 var expires = DateTime.Now.AddMinutes(jwtTokenOptions.Expires); var token = new JwtSecurityToken( issuer: jwtTokenOptions.Issuer, audience: jwtTokenOptions.Audience, claims: claims, notBefore: DateTime.Now, expires: expires, signingCredentials: credentials ); string jwtToken = new JwtSecurityTokenHandler().WriteToken(token); objAjaxResult.Result = DoResult.Success; objAjaxResult.RetValue = new { token = jwtToken }; objAjaxResult.PromptMsg = "登录成功"; } return new NewtonsoftJsonResult(objAjaxResult); }

授权

在授权时,应用指示要使用的处理程序。 选择应用程序将通过以逗号分隔的身份验证方案列表传递到来授权的处理程序 [Authorize] 。 [Authorize]属性指定要使用的身份验证方案或方案,不管是否配置了默认。

默认授权

因为上面认证配置中我们使用cookie作为默认配置,所以前端对应的controller就不用指定验证方案,直接打上[Authorize]即可。

选择授权

对于API接口我们使用Jwt授权,在Controller上打上指定方案。

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]

总结

关于多种方案混合验证授权的流程:
1、配置认证方案(相关的配置参数可采用配置文件形式)。
2、添加授权验证中间件。
3、提供认证接口。
4、配置需要授权的接口授权方案。

到此这篇关于asp.net core3.1cookie和jwt混合认证授权实现多种身份验证方案的文章就介绍到这了,更多相关asp.net core cookie和jwt认证授权内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zysfdp.html