Example #1
0
        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);
        }
Example #2
0
        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));
        }
Example #4
0
        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);
        }
Example #7
0
    public void JsonWebTokenService()
    {
        var claims = new List <Claim> {
            new("sub", Guid.NewGuid().ToString())
        };

        var token = _jsonWebTokenService.Encode(claims);

        Assert.IsNotNull(token);
    }
Example #8
0
        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));
        }
Example #10
0
    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());
    }
Example #11
0
        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));
        }
Example #12
0
        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);
        }
Example #13
0
        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}"));
        }
Example #14
0
        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}"));
        }