public async Task <string> JwtLogin(LoginInputDto loginInputDto) { LinUser user = await _userRepository.GetUserAsync(r => r.Username == loginInputDto.Username); if (user == null) { throw new LinCmsException("用户不存在", ErrorCode.NotFound); } bool valid = await _userIdentityService.VerifyUserPasswordAsync(user.Id, loginInputDto.Password); if (!valid) { throw new LinCmsException("请输入正确密码", ErrorCode.ParameterError); } await _userRepository.UpdateLastLoginTimeAsync(user.Id); List <Claim> claims = new List <Claim>() { new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), new Claim(ClaimTypes.Email, user.Email ?? ""), new Claim(ClaimTypes.GivenName, user.Nickname ?? ""), new Claim(ClaimTypes.Name, user.Username ?? ""), }; string token = _jsonWebTokenService.Encode(claims); return(token); }
public async Task <TokenDto> CreateTokenAsync(UserEntity user) { List <Claim> claims = new List <Claim>() { new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), new Claim(ClaimTypes.Email, user.Email ?? ""), new Claim(ClaimTypes.GivenName, user.Nickname ?? ""), new Claim(ClaimTypes.Name, user.Username ?? ""), }; user.Roles?.ForEach(r => { claims.Add(new Claim(ClaimTypes.Role, r.Name)); claims.Add(new Claim(CoreClaimTypes.Roles, r.Id.ToString())); }); string token = _jsonWebTokenService.Encode(claims); string refreshToken = GenerateToken(); user.ChangeLoginStatus(refreshToken); await _userRepo.UpdateAsync(user); return(new TokenDto(token, refreshToken)); }
private async Task <Tokens> CreateTokenAsync(LinUser user) { List <Claim> claims = new List <Claim>() { new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), new Claim(ClaimTypes.Email, user.Email ?? ""), new Claim(ClaimTypes.GivenName, user.Nickname ?? ""), new Claim(ClaimTypes.Name, user.Username ?? ""), }; user.LinGroups?.ForEach(r => { claims.Add(new Claim(ClaimTypes.Role, r.Name)); claims.Add(new Claim(LinCmsClaimTypes.Groups, r.Id.ToString())); }); string token = _jsonWebTokenService.Encode(claims); string refreshToken = GenerateToken(); user.AddRefreshToken(refreshToken); await _userRepository.UpdateAsync(user); return(new Tokens(token, refreshToken)); }
private async Task <Tokens> CreateTokenAsync(User user) { List <Claim> claims = new List <Claim>() { new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), new Claim(ClaimTypes.Name, user.UserName ?? ""), new Claim(ClaimTypes.Email, user.Email ?? ""), new Claim(ClaimTypes.GivenName, user.NikeName ?? ""), new Claim(ClaimTypes.MobilePhone, user.Mobile ?? "") }; //添加角色信息 //TODO string token = _jsonWebTokenService.Encode(claims); string refreshToken = GenerateToken(); user.LastLoginTime = DateTime.Now; user.RefreshToken = refreshToken; await _userRepository.UpdateAsync(user); var jwtToken = _jsonWebTokenService.Decode(token); return(new Tokens(token, refreshToken, jwtToken["exp"]?.ToString())); }
/// <summary> /// JWT登录 /// </summary> /// <param name="loginInputDto"></param> /// <returns></returns> public async Task <Tokens> LoginAsync(LoginInputDto loginInputDto) { _logger.LogInformation("JwtLogin"); LinUser user = await _userRepository.GetUserAsync(r => r.Username == loginInputDto.Username); if (user == null) { throw new LinCmsException("用户不存在", ErrorCode.NotFound); } bool valid = await _userIdentityService.VerifyUserPasswordAsync(user.Id, loginInputDto.Password); if (!valid) { throw new LinCmsException("请输入正确密码", ErrorCode.ParameterError); } List <Claim> claims = new List <Claim>() { new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), new Claim(ClaimTypes.Email, user.Email ?? ""), new Claim(ClaimTypes.GivenName, user.Nickname ?? ""), new Claim(ClaimTypes.Name, user.Username ?? "") }; user.LinGroups?.ForEach(r => { claims.Add(new Claim(ClaimTypes.Role, r.Name)); claims.Add(new Claim(LinCmsClaimTypes.Groups, r.Id.ToString())); }); _logger.LogInformation($"用户{loginInputDto.Username},登录成功,{JsonConvert.SerializeObject(claims)}"); string token = _jsonWebTokenService.Encode(claims); var refreshToken = GenerateToken(); user.AddRefreshToken(refreshToken); await _userRepository.UpdateAsync(user); return(new Tokens(token, refreshToken)); }
public string Login(string loginName) { List <Claim> claims = new List <Claim>() { new Claim(ClaimTypes.NameIdentifier, loginName) }; string token = _jsonWebTokenService.Encode(claims); return(token); }
public void JsonWebTokenService() { var claims = new List <Claim> { new("sub", Guid.NewGuid().ToString()) }; var token = _jsonWebTokenService.Encode(claims); Assert.IsNotNull(token); }
public TokenModel CreateToken(SignedInModel signedInModel) { var claims = new List <Claim>(); claims.AddSub(signedInModel.Id.ToString()); claims.AddRoles(signedInModel.Roles.ToString().Split(", ")); var token = _jsonWebTokenService.Encode(claims); return(new TokenModel(token)); }
private TokenModel CreateToken(AuthEntity authEntity) { var claims = new List <Claim>(); claims.AddSub(authEntity.Id.ToString()); claims.AddRoles(authEntity.Roles.ToArray()); var token = _jsonWebTokenService.Encode(claims); return(new TokenModel(token)); }
private IResult <TokenModel> CreateToken(Auth auth) { var claims = new List <Claim>(); claims.AddSub(auth.Id.ToString()); claims.AddRoles(auth.Roles.ToArray()); var token = _jsonWebTokenService.Encode(claims); return(new TokenModel(token).Success()); }
public TokenModel CreateToken(SignedInModel signedInModel) { if (signedInModel is null) { throw new ArgumentNullException(nameof(signedInModel)); } var claims = new List <Claim>(); claims.AddSub(signedInModel.Id.ToString(CultureInfo.CurrentCulture)); claims.AddRoles(signedInModel.Roles.ToString().Split(", ")); var token = _jsonWebTokenService.Encode(claims); return(new TokenModel(token)); }
public async Task <TokenResponse> SignInUserHandler(SignInUserDto request) { var user = await _dbContext.Users.Where(p => p.Username == request.UserEmail.ToLower()).Select(p => new UserEntity() { Id = p.Id, Username = p.Username, Password = p.Password, Email = p.Email, }).SingleOrDefaultAsync(); if (user == null) { user = await _dbContext.Users.Where(p => p.Email == request.UserEmail.ToLower()).Select(p => new UserEntity() { Id = p.Id, Username = p.Username, Password = p.Password, Email = p.Email, }).SingleOrDefaultAsync(); if (user == null) { throw new TwitterApiException(400, "Invalid useremail"); } } if (user.Password != request.Password.ToLower()) { throw new TwitterApiException(400, "Incorrect password"); } var claims = new List <Claim>(); claims.AddSub(user.Id.ToString()); claims.AddName(user.Username); var token = _jsonWebTokenService.Encode(claims); var tokenResponse = new TokenResponse(token, Convert.ToInt32(_jsonWebTokenSettings.Expires.TotalSeconds)); return(tokenResponse); }
public async Task <IActionResult> Home(string provider, string redirectUrl = "") { if (string.IsNullOrWhiteSpace(provider)) { return(BadRequest()); } if (!await HttpContext.IsProviderSupportedAsync(provider)) { return(BadRequest()); } AuthenticateResult authenticateResult = await _contextAccessor.HttpContext.AuthenticateAsync(provider); if (!authenticateResult.Succeeded) { return(Redirect(redirectUrl)); } var openIdClaim = authenticateResult.Principal.FindFirst(ClaimTypes.NameIdentifier); if (openIdClaim == null || string.IsNullOrWhiteSpace(openIdClaim.Value)) { return(Redirect(redirectUrl)); } List <string> supportProviders = new List <string> { LinUserIdentity.Gitee, LinUserIdentity.GitHub, LinUserIdentity.QQ, }; if (!supportProviders.Contains(provider)) { _logger.LogError($"未知的privoder:{provider},redirectUrl:{redirectUrl}"); throw new LinCmsException($"未知的privoder:{provider}!"); } IOAuth2Service oAuth2Service = _componentContext.ResolveNamed <IOAuth2Service>(provider); long id = await oAuth2Service.SaveUserAsync(authenticateResult.Principal, openIdClaim.Value); List <Claim> authClaims = authenticateResult.Principal.Claims.ToList(); LinUser user = await _userRepository.Select.IncludeMany(r => r.LinGroups) .WhereCascade(r => r.IsDeleted == false).Where(r => r.Id == id).FirstAsync(); if (user == null) { throw new LinCmsException("第三方登录失败!"); } List <Claim> claims = new List <Claim>() { new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), new Claim(ClaimTypes.Email, user.Email ?? ""), new Claim(ClaimTypes.GivenName, user.Nickname ?? ""), new Claim(ClaimTypes.Name, user.Username ?? ""), }; user.LinGroups?.ForEach(r => { claims.Add(new Claim(LinCmsClaimTypes.Groups, r.Id.ToString())); }); //claims.AddRange(authClaims); string token = _jsonWebTokenService.Encode(claims); //TODO 生成刷新token //user.AddRefreshToken(token); //await _userRepository.UpdateAsync(user); return(Redirect($"{redirectUrl}#login-result?token={token}")); }
public async Task <IActionResult> Home(string provider, string redirectUrl = "") { if (string.IsNullOrWhiteSpace(provider)) { return(BadRequest()); } if (!await HttpContext.IsProviderSupportedAsync(provider)) { return(BadRequest()); } AuthenticateResult authenticateResult = await _contextAccessor.HttpContext.AuthenticateAsync(provider); if (!authenticateResult.Succeeded) { return(Redirect(redirectUrl)); } var openIdClaim = authenticateResult.Principal.FindFirst(ClaimTypes.NameIdentifier); if (openIdClaim == null || string.IsNullOrWhiteSpace(openIdClaim.Value)) { return(Redirect(redirectUrl)); } long id = 0; switch (provider) { case LinUserIdentity.GitHub: id = await _userCommunityService.SaveGitHubAsync(authenticateResult.Principal, openIdClaim.Value); break; case LinUserIdentity.QQ: id = await _userCommunityService.SaveQQAsync(authenticateResult.Principal, openIdClaim.Value); break; case LinUserIdentity.Gitee: string access_token = authenticateResult.Properties.GetTokenValue("access_token"); string refresh_token = authenticateResult.Properties.GetTokenValue("refresh_token"); string token_type = authenticateResult.Properties.GetTokenValue("token_type"); string expires_at = authenticateResult.Properties.GetTokenValue("expires_at"); id = await _userCommunityService.SaveGiteeAsync(authenticateResult.Principal, openIdClaim.Value); break; case LinUserIdentity.WeiXin: break; default: _logger.LogError($"未知的privoder:{provider},redirectUrl:{redirectUrl}"); throw new LinCmsException($"未知的privoder:{provider}!"); } List <Claim> authClaims = authenticateResult.Principal.Claims.ToList(); LinUser user = await _userRepository.Select.IncludeMany(r => r.LinGroups) .WhereCascade(r => r.IsDeleted == false).Where(r => r.Id == id).FirstAsync(); if (user == null) { throw new LinCmsException("第三方登录失败!"); } List <Claim> claims = new List <Claim>() { new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), new Claim(ClaimTypes.Email, user.Email ?? ""), new Claim(ClaimTypes.GivenName, user.Nickname ?? ""), new Claim(ClaimTypes.Name, user.Username ?? ""), }; user.LinGroups?.ForEach(r => { claims.Add(new Claim(LinCmsClaimTypes.Groups, r.Id.ToString())); }); //claims.AddRange(authClaims); string token = _jsonWebTokenService.Encode(claims); //TODO 生成刷新token //user.AddRefreshToken(token); //await _userRepository.UpdateAsync(user); return(Redirect($"{redirectUrl}#login-result?token={token}")); }