コード例 #1
0
        public async Task <AuthenticationResultModel> AuthenticateAsync(UsersMaster user)
        {
            // authentication successful so generate jwt token
            AuthenticationResultModel authenticationResult = new AuthenticationResultModel();
            var tokenHandler = new JwtSecurityTokenHandler();

            try
            {
                var key = Encoding.ASCII.GetBytes(_appSettings.JwtSettings.Secret);

                ClaimsIdentity Subject = new ClaimsIdentity(new Claim[]
                {
                    new Claim("UserId", user.UserId.ToString()),
                    new Claim("FirstName", user.FirstName),
                    new Claim("LastName", user.LastName),
                    new Claim("EmailId", user.Email == null?"":user.Email),
                    new Claim("UserName", user.UserName == null?"":user.UserName),
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                });
                foreach (var item in GetUserRole(user.UserId))
                {
                    Subject.AddClaim(new Claim(ClaimTypes.Role, item.RoleName));
                }

                var tokenDescriptor = new SecurityTokenDescriptor
                {
                    Subject            = Subject,
                    Expires            = DateTime.UtcNow.Add(_appSettings.JwtSettings.TokenLifetime),
                    SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
                };
                var token = tokenHandler.CreateToken(tokenDescriptor);

                authenticationResult.Token = tokenHandler.WriteToken(token);


                var refreshToken = new RefreshToken
                {
                    Token        = Guid.NewGuid().ToString(),
                    JwtId        = token.Id,
                    UserId       = user.UserId,
                    CreationDate = DateTime.UtcNow,
                    ExpiryDate   = DateTime.UtcNow.AddMonths(6)
                };
                await _context.RefreshTokens.AddAsync(refreshToken);

                await _context.SaveChangesAsync();

                authenticationResult.RefreshToken = refreshToken.Token;
                authenticationResult.Success      = true;
                return(authenticationResult);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
コード例 #2
0
        public async Task <ResponseModel <TokenModel> > LoginAsync(LoginModel login)
        {
            ResponseModel <TokenModel> response = new ResponseModel <TokenModel>();

            try
            {
                UsersMaster loginUser = _context.UsersMasters.FirstOrDefault(c => c.UserName == login.UserName && c.Password == login.Password);

                if (loginUser == null)
                {
                    response.IsSuccess = false;
                    response.Message   = "Invalid Username And Password";
                    return(response);
                }


                AuthenticationResultModel authenticationResult = await AuthenticateAsync(loginUser);

                if (authenticationResult != null && authenticationResult.Success)
                {
                    response.Data = new TokenModel()
                    {
                        Token = authenticationResult.Token, RefreshToken = authenticationResult.RefreshToken
                    };
                }
                else
                {
                    response.Message   = "Something went wrong!";
                    response.IsSuccess = false;
                }

                return(response);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }