/// <summary> /// 根据用户信息和密匙生成token /// </summary> /// <param name="userInfo"></param> /// <param name="symmetricKey"></param> /// <returns></returns> public string CreateToken(UserClaimInfo userInfo, string symmetricKey) { var tokenHandler = new JwtSecurityTokenHandler(); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new ClaimsIdentity(_claimManager.CreateClaims(userInfo)), Expires = DateTime.UtcNow.AddDays(7), SigningCredentials = new SigningCredentials( new SymmetricSecurityKey(Encoding.ASCII.GetBytes(symmetricKey)), SecurityAlgorithms.HmacSha256Signature ) }; var token = tokenHandler.CreateToken(tokenDescriptor); return(tokenHandler.WriteToken(token)); }
public List <Claim> CreateClaims(UserClaimInfo userInfo) { List <Claim> claims = new List <Claim>() { new Claim(JwtClaimType.Subject, userInfo.Subject), new Claim(JwtClaimType.Audience, JwtAuthenConfiguration.Audience), new Claim(JwtClaimType.Issuer, JwtAuthenConfiguration.Issuer), new Claim(JwtClaimType.NameIdentifier, userInfo.Subject), new Claim(JwtClaimType.UserName, userInfo.UserName), new Claim(JwtClaimType.Name, userInfo.Name ?? ""), new Claim(JwtClaimType.EmailAddress, userInfo.EmailAddress ?? ""), new Claim(JwtClaimType.Phone, userInfo.Phone ?? ""), }; foreach (var e in userInfo.Permissions) { claims.Add(new Claim(JwtClaimType.Permission, e)); } return(claims); }
public async Task <ActionResult <object> > LoginAsync([FromBody] LoginApiModel model) { LoginInput input = new LoginInput() { Username = model.AccountID, Password = model.Password, TenantId = _AbpSession.TenantId, }; var output = await _AccountAppService.Login(input); if (output.AbpLoginResult.Result == AbpLoginResultType.InvalidUserNameOrEmailAddress) { throw new UserFriendlyException("用户名或密码错误"); } if (output.AbpLoginResult.Result == AbpLoginResultType.InvalidPassword) { throw new UserFriendlyException("密码错误"); } IdentityUser user = output.AbpLoginResult.User; UserClaimInfo userClaimInfo = new UserClaimInfo(user.Id.ToString(), user.Permissions) { Name = user.Name, UserName = user.UserName }; string jwtToken = _JwtTokenHandler.CreateToken(userClaimInfo, WebConfiguration.SymmetricKey); return(new { access_token = jwtToken, token_type = "Bearer" }); }