示例#1
0
        public ActionResult <string> Post(
            AuthenticationRequest authRequest,
            [FromServices] IJwtSigningEncodingKey signingEncodingKey)
        {
            // 1. Проверяем данные пользователя из запроса.
            // ...

            // 2. Создаем утверждения для токена.
            var claims = new Claim[]
            {
                new Claim(ClaimTypes.NameIdentifier, authRequest.Name)
            };

            // 3. Генерируем JWT.
            var token = new JwtSecurityToken(
                issuer: "DemoApp",
                audience: "DemoAppClient",
                claims: claims,
                expires: DateTime.Now.AddMinutes(5),
                signingCredentials: new SigningCredentials(
                    signingEncodingKey.GetKey(),
                    signingEncodingKey.SigningAlgorithm)
                );

            string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);

            return(jwtToken);
        }
        public ActionResult <string> Post(AuthenticationRequest authRequest, [FromServices] IJwtSigningEncodingKey signingEncodingKey)
        {
            if (string.IsNullOrWhiteSpace(authRequest.Name) || string.IsNullOrWhiteSpace(authRequest.Password) || authRequest?.Password != AppSettings.LoadAppSettings().AdminPassword)
            {
                return(Unauthorized());
            }

            var claims = new Claim[]
            {
                new Claim(ClaimTypes.NameIdentifier, authRequest.Name)
            };

            var token = new JwtSecurityToken(
                issuer: "AiratApp",
                audience: "AiratClients",
                claims: claims,
                expires: DateTime.Now.AddHours(3),
                signingCredentials: new SigningCredentials(
                    signingEncodingKey.GetKey(),
                    signingEncodingKey.SigningAlgorithm)
                );

            string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);

            return(jwtToken);
        }
示例#3
0
        public ActionResult Login([FromBody] LoginViewModel model,
                                  [FromServices] IJwtSigningEncodingKey signingEncodingKey,
                                  [FromServices] IJwtEncryptingEncodingKey encryptingEncodingKey)
        {
            var user = _repository.GetByEmail(model.Email);

            if (user == null || !_passwordHasher.VerifyIdentityV3Hash(model.Password, user.PasswordHash))
            {
                return(Unauthorized());
            }

            var usersClaims = new []
            {
                new Claim(ClaimTypes.Name, user.Email),
                new Claim(ClaimTypes.NameIdentifier, user.Id.ToString())
            };

            var jwtToken     = _tokenService.GenerateAccessToken(usersClaims, signingEncodingKey, encryptingEncodingKey);
            var refreshToken = _tokenService.GenerateRefreshToken();

            return(Ok(
                       new
            {
                token = jwtToken,
                refreshToken = refreshToken
            }));
        }
示例#4
0
        public async Task <UserToken> CreateUser(CreateUserRequest createRequest, IJwtSigningEncodingKey signingEncodingKey)
        {
            //createRequest.Password = Crypto.ComputeSha256Hash(createRequest.Password);
            var dbUsers = await _context.Users.Find(us => us.Email == createRequest.Email && us.Password == createRequest.Password).ToListAsync();

            if (dbUsers.Count > 0)
            {
                throw new RequestedResourceHasConflictException("Create failed. Change email");
            }

            var dbUser = _mapper.Map <CreateUserRequest, UserDTO>(createRequest);
            await _context.Users.InsertOneAsync(dbUser);

            var u = _mapper.Map <User>(dbUser);

            string token = CreateToken(u, signingEncodingKey);


            UserToken user = new UserToken
            {
                Id    = u.Id,
                Token = token,
                Name  = u.Name,
            };

            return(user);
        }
        public ActionResult <string> Post(AuthenticationRequest authRequest,
                                          [FromServices] IJwtSigningEncodingKey signingEncodingKey,
                                          [FromServices] IJwtEncryptingEncodingKey encryptingEncodingKey)
        {
            var claims = new[]
            {
                new Claim(ClaimTypes.NameIdentifier, authRequest.Name)
            };

            var tokenHandler = new JwtSecurityTokenHandler();

            JwtSecurityToken token = tokenHandler.CreateJwtSecurityToken(
                issuer: "SampleOfWebAPI",
                audience: "WebAPI",
                subject: new ClaimsIdentity(claims),
                notBefore: DateTime.Now,
                expires: DateTime.Now.AddHours(1),
                issuedAt: DateTime.Now,
                signingCredentials: new SigningCredentials(
                    signingEncodingKey.GetKey(),
                    signingEncodingKey.SigningAlgorithm),
                encryptingCredentials: new EncryptingCredentials(
                    encryptingEncodingKey.GetKey(),
                    encryptingEncodingKey.SigningAlgorithm,
                    encryptingEncodingKey.EncryptingAlgorithm));

            string jwtToken = tokenHandler.WriteToken(token);

            return(jwtToken);
        }
示例#6
0
        public string GenerateJwtToken(UserModel user, IJwtSigningEncodingKey signingEncodingKey, IJwtEncryptingEncodingKey encryptingEncodingKey)
        {
            var claims = new Claim[]
            {
                new Claim(ClaimTypes.Name, user?.Login),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
            };

            var tokenHandler = new JwtSecurityTokenHandler();

            var token = tokenHandler.CreateJwtSecurityToken(
                issuer: JwtSettings.ValidIssuer,
                audience: JwtSettings.ValidAudience,
                subject: new ClaimsIdentity(claims),
                notBefore: DateTime.Now,
                expires: DateTime.Now.AddMinutes(5),
                issuedAt: DateTime.Now,
                signingCredentials: new SigningCredentials(
                    signingEncodingKey.GetKey(),
                    signingEncodingKey.SigningAlgorithm),
                encryptingCredentials: new EncryptingCredentials(
                    encryptingEncodingKey.GetKey(),
                    encryptingEncodingKey.SigningAlgorithm,
                    encryptingEncodingKey.EncryptingAlgorithm)
                );

            var jwteString = tokenHandler.WriteToken(token);

            return(jwteString);
        }
示例#7
0
 public TokenEngine(
     [FromServices] IJwtSigningEncodingKey signingEncodingKey,
     [FromServices] IOptions <TokenSettings> tokenOptions)
 {
     _signingEncodingKey = signingEncodingKey;
     _tokenOptions       = tokenOptions;
 }
示例#8
0
 public AccountController(IJwtSigningEncodingKey signingEncodingKey,
                          IConfiguration configuration, IUserRepository userRepository)
 {
     _signingEncodingKey = signingEncodingKey;
     _configuration      = configuration;
     _userRepository     = userRepository;
 }
示例#9
0
 public TokenGenerator(IConfiguration configuration,
                       IJwtSigningEncodingKey signingEncodingKey,
                       IJwtEncryptingEncodingKey encryptingEncodingKey)
 {
     _signingEncodingKey    = signingEncodingKey;
     _encryptingEncodingKey = encryptingEncodingKey;
     _configuration         = configuration;
 }
示例#10
0
        public SignInUserCommand(UserSignInInput signInInput, IJwtSigningEncodingKey signingEncodingKey)
        {
            Guard.IsNotNull(signInInput, nameof(signInInput));
            Guard.IsNotNull(signingEncodingKey, nameof(signingEncodingKey));

            _signInInput        = signInInput;
            _signingEncodingKey = signingEncodingKey;
        }
示例#11
0
 public TokenProvider(Microsoft.AspNetCore.Identity.UserManager <IdentityUser> userManager,
                      SignInManager <IdentityUser> signInManager,
                      IOptions <AppSettings> appSettingsOptions,
                      IJwtSigningEncodingKey signingEncodingKey)
 {
     _userManager        = userManager;
     _signInManager      = signInManager;
     _appSettings        = appSettingsOptions.Value;
     _signingEncodingKey = signingEncodingKey;
 }
示例#12
0
 public AuthService(
     IUserService userSrv,
     IJwtSigningEncodingKey signingEncodingKey,
     IConfiguration config
     )
 {
     _userService        = userSrv;
     _signingEncodingKey = signingEncodingKey;
     _configuration      = config;
 }
示例#13
0
 public static JwtSecurityToken GetJWT(Claim[] claims, IJwtSigningEncodingKey signingEncodingKey)
 {
     return(new JwtSecurityToken(
                //issuer: "team7_projectApp",
                //audience: "team7_projectClient",
                claims: claims,
                expires: DateTime.Now.AddMinutes(AuthOptions.LIFETIME),
                signingCredentials: new SigningCredentials(signingEncodingKey.GetKey(), signingEncodingKey.SigningAlgorithm)
                ));
 }
示例#14
0
        public string LogIn([FromBody] LoginUser data, [FromServices] IJwtSigningEncodingKey signingEncodingKey)
        {
            User user = repo.LoginUser(data.Login, data.Password);

            if (user != null)
            {
                ActionResult <string> tokenSecure = CreateToken(user, signingEncodingKey);
                return(JsonConvert.SerializeObject(tokenSecure));
            }
            return("false");
        }
示例#15
0
        public JwtService(IOptions <TokenLifeTimeOptions> tokenLifeTimeOptions,
                          IOptions <AuthOptions> authOptions,
                          IJwtSigningEncodingKey signInEncodingKey,
                          IJwtEncryptingEncodingKey jwtEncryptionEncodingKey,
                          IAesCipher crypt)
        {
            this.tokenLifeTimeOptions = tokenLifeTimeOptions;
            this.authOptions          = authOptions;

            this.signInEncodingKey        = signInEncodingKey;
            this.jwtEncryptionEncodingKey = jwtEncryptionEncodingKey;
            this.crypt = crypt;
        }
示例#16
0
 public AuthService(
     IMongoManager mongoManager,
     ILogger <AuthService> logger,
     IHasher hasher,
     IJwtSigningEncodingKey signingEncodingKey,
     IJwtEncryptingEncodingKey encryptingEncodingKey
     )
 {
     _mongoManager          = mongoManager;
     _logger                = logger;
     _hasher                = hasher;
     _signingEncodingKey    = signingEncodingKey;
     _encryptingEncodingKey = encryptingEncodingKey;
 }
示例#17
0
 public AuthService(
     IMapper mapper,
     IUserService userService,
     IJwtSigningEncodingKey signingEncodingKey,
     IConfiguration configuration,
     IUoW unitOfWork
     )
 {
     _mapper             = mapper;
     _userService        = userService;
     _signingEncodingKey = signingEncodingKey;
     _configuration      = configuration;
     _unitOfWork         = unitOfWork;
 }
示例#18
0
        public AccountHelperTests()
        {
            _accountHelper = new AccountHelper();

            // Setting up a jwe keys
            const string signingSecurityKey = "745hvv43uhvfnvu2v";
            var          signingKey         = new SigningSymmetricKey(signingSecurityKey);

            const string encodingSecurityKey   = "dfkng20jfsdjfvsdmvw";
            var          encryptionEncodingKey = new EncryptingSymmetricKey(encodingSecurityKey);

            _signingEncodingKey    = signingKey;
            _encryptingEncodingKey = encryptionEncodingKey;
        }
示例#19
0
        public IActionResult RefreshToken([FromBody] RefreshTokenViewModel model,
                                          [FromServices] IJwtSigningEncodingKey signingEncodingKey,
                                          [FromServices] IJwtEncryptingEncodingKey encryptingEncodingKey)
        {
            var principal = _tokenService.GetPrincipalFromExpiredToken(model.Token);
            var username  = principal.Identity.Name;

            var newJwtToken     = _tokenService.GenerateAccessToken(principal.Claims, signingEncodingKey, encryptingEncodingKey);
            var newRefreshToken = _tokenService.GenerateRefreshToken();

            return(Ok(
                       new
            {
                token = newJwtToken,
                refreshToken = newRefreshToken
            }));
        }
示例#20
0
        public async Task <ActionResult <string> > Post(AuthModel auth, [FromServices] IJwtSigningEncodingKey signingEncodingKey)
        {
            try
            {
                var user = await _userManager.FindByEmailAsync(auth.Email);

                var result = user == null ? Microsoft.AspNetCore.Identity.SignInResult.NotAllowed : await _signInManager.PasswordSignInAsync(user, auth.Password, /*model.RememberMe*/ false, lockoutOnFailure : false);

                if (result.Succeeded)
                {
                    // Создаем утверждения для токена
                    var claims = new Claim[]
                    {
                        new Claim(ClaimTypes.NameIdentifier, user.Id.ToString(), ClaimValueTypes.Integer64),
                        new Claim(ClaimTypes.Name, user.UserName),
                        new Claim(ClaimTypes.Email, user.Email),
                        new Claim(AuthOptions.Company, (user.Level == AspNetUserLevel.Company ? user.Company_Id : auth.Company_Id ?? user.Company_Id).ToString()),
                        new Claim(AuthOptions.Level, user.Level.ToString())
                    };

                    // Генерируем JWT
                    var token = new JwtSecurityToken(
                        issuer: AuthOptions.Issuer,
                        audience: AuthOptions.Audience,
                        claims: claims,
                        expires: DateTime.Now.AddMinutes(AuthOptions.Lifetime),
                        signingCredentials: new SigningCredentials(signingEncodingKey.GetKey(), signingEncodingKey.SigningAlgorithm));

                    string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);
                    return(jwtToken);
                }

                if (result.IsLockedOut)
                {
                    return(Forbidden("User account locked out"));
                }
                else
                {
                    return(Forbidden("Invalid login attempt"));
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
示例#21
0
        public IActionResult  Post(
            [FromBody] AuthenticationRequest authRequest,
            [FromServices] IJwtSigningEncodingKey signingEncodingKey)
//        public IActionResult  Get([FromServices] IJwtSigningEncodingKey signingEncodingKey)
        {
            var user  = _userService.Get(authRequest.Login);
            var error = string.Empty;

            if (user == null)
            {
                error = "user not found";
            }
            else
            {
                if (user.Password != authRequest.Password)
                {
                    error = "user not found";
                }
            }

            if (error.Length > 0)
            {
                return(BadRequest(new { error = error }));
            }

            var claims = new List <Claim>
            {
                new Claim(ClaimTypes.NameIdentifier, user.Login)
            };


            var token = new JwtSecurityToken(
                issuer: "http://localhost:63342",
                audience: "http://localhost:4200",
                claims: claims,
                expires: DateTime.Now.AddMinutes(5),
                signingCredentials: new SigningCredentials(
                    signingEncodingKey.GetKey(),
                    signingEncodingKey.SigningAlgorithm)
                );

            string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);

            return(Ok(new { tokenKey = jwtToken }));
        }
示例#22
0
        public ActionResult <string> Post([FromBody] UserRegistrationInfo authRequest,
                                          [FromServices] IJwtSigningEncodingKey signingEncodingKey, CancellationToken cancellationToken)
        {
            if (authRequest == null)
            {
                var error = ServiceErrorResponses.BodyIsMissing(nameof(authRequest));
                return(BadRequest(error));
            }

            var user = _userRepository.GetAsync(authRequest.Login, cancellationToken);

            if (user.Result == null)
            {
                var error = ServiceErrorResponses.UserNotFound(authRequest.Login);
                return(BadRequest(error));
            }

            if (user.Result.PasswordHash != Authenticator.HashPassword(authRequest.Password))
            {
                var error = ServiceErrorResponses.IncorrectPassword();
                return(BadRequest(error));
            }

            var claims = new Claim[]
            {
                new Claim(ClaimTypes.NameIdentifier, authRequest.Login),
            };

            var token = new JwtSecurityToken(
                issuer: "TodoListApp",
                audience: "Client",
                claims: claims,
                expires: DateTime.Now.AddMinutes(10),
                signingCredentials: new SigningCredentials(
                    signingEncodingKey.GetKey(),
                    signingEncodingKey.SigningAlgorithm)
                );

            string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);

            return(jwtToken);
        }
示例#23
0
        public ActionResult <string> Post(AuthenticationRequest authRequest, [FromServices] IJwtSigningEncodingKey signingEncodingKey, [FromServices] IJwtEncryptingEncodingKey encryptingEncodingKey)
        {
            // 1. Проверяем данные пользователя из запроса.
            // ...
            var identity = GetIdentity(authRequest.Name, authRequest.Password);

            if (identity == null)
            {
                Response.StatusCode = 400;
                Response.WriteAsync("Invalid username or password.").GetAwaiter().GetResult();
                return(null);
            }
            else
            {
                // 2. Создаем утверждения для токена.
                var claims = new Claim[]
                {
                    new Claim(ClaimTypes.NameIdentifier, authRequest.Name)
                };

                // 3. Генерируем JWT.
                var tokenHandler = new JwtSecurityTokenHandler();

                JwtSecurityToken token = tokenHandler.CreateJwtSecurityToken(
                    issuer: "DemoApp",
                    audience: "DemoAppClient",
                    subject: new ClaimsIdentity(claims),
                    notBefore: DateTime.Now,
                    expires: DateTime.Now.AddMinutes(5),
                    issuedAt: DateTime.Now,
                    signingCredentials: new SigningCredentials(
                        signingEncodingKey.GetKey(),
                        signingEncodingKey.SigningAlgorithm),
                    encryptingCredentials: new EncryptingCredentials(
                        encryptingEncodingKey.GetKey(),
                        encryptingEncodingKey.SigningAlgorithm,
                        encryptingEncodingKey.EncryptingAlgorithm));

                var jwtToken = tokenHandler.WriteToken(token);
                return(jwtToken);
            }
        }
示例#24
0
        public JwtUser(User user, string password, IJwtSigningEncodingKey signingEncodingKey)
        {
            _user = user;

            if (_user == null)
            {
                IsUserExists = false;
                return;
            }

            IsEmailConfirmed = user.IsEmailConfirmed;

            if (!user.IsPasswordCorrect(password))
            {
                return;
            }

            IsPasswordCorrect   = true;
            _signingEncodingKey = signingEncodingKey;
        }
示例#25
0
        public async Task <ActionResult <string> > GetToken(AuthModel userAuth, [FromServices] IJwtSigningEncodingKey signingEncodingKey)
        {
            // Проверяем данные пользователя из запроса.
            if (!ModelState.IsValid)
            {
                _logger.LogInformation($"Неверный запрос");
                return(BadRequest(ModelState));
            }

            User userDb = await ContextDb.GetAsync(userAuth.Name);

            if (userDb == null || !Hash.Validate(userAuth.Password, userDb.Sault, userDb.HashPassword))
            {
                _logger.LogInformation($"Неверный пользователь");
                return(Unauthorized($"Данный пользователь не зарегистрирован в системе."));
            }

            // Создаем утверждения для токена.
            var claims = new Claim[] {
                new Claim(ClaimTypes.NameIdentifier, userAuth.Name),
                new Claim(ClaimTypes.Role, userDb.Role.Name)
            };

            // Генерируем JWT.
            var token = new JwtSecurityToken(
                issuer: AuthOptions.ISSUER,
                audience: AuthOptions.AUDIENCE,
                claims: claims,
                expires: DateTime.Now.Add(AuthOptions.LIFETIME),
                signingCredentials: new SigningCredentials(
                    signingEncodingKey.GetKey(),
                    signingEncodingKey.SigningAlgorithm)
                );

            string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);

            _logger.LogInformation($"Для пользователя {userAuth.Name} создан токен: {jwtToken}");
            return(Ok(jwtToken));
        }
示例#26
0
        public async Task <UserToken> LogIn(VerifyUserRequest request, IJwtSigningEncodingKey signingEncodingKey)
        {
            //request.Password = Crypto.ComputeSha256Hash(request.Password);
            var dbUsers = await _context.Users.Find(us => us.Email == request.Email && us.Password == request.Password).ToListAsync();

            if (dbUsers.Count == 0)
            {
                throw new CreateFailedException("Incorrect email or password");
            }
            var u = _mapper.Map <User>(dbUsers[0]);

            string token = CreateToken(u, signingEncodingKey);

            UserToken user = new UserToken
            {
                Id    = u.Id,
                Token = token,
                Name  = u.Name,
            };

            return(user);
        }
示例#27
0
        private string CreateToken(User createRequest, IJwtSigningEncodingKey signingEncodingKey)
        {
            var claims = new Claim[]
            {
                new Claim(ClaimTypes.NameIdentifier, createRequest.Name),
                new Claim(ClaimTypes.Email, createRequest.Email),
            };

            var token = new JwtSecurityToken(
                issuer: "DemoApp",
                audience: "DemoAppClient",
                claims: claims,
                expires: DateTime.Now.AddMinutes(60),
                signingCredentials: new SigningCredentials(
                    signingEncodingKey.GetKey(),
                    signingEncodingKey.SigningAlgorithm)
                );

            string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);

            return(jwtToken);
        }
示例#28
0
        public string GenerateAccessToken(IEnumerable <Claim> claims,
                                          IJwtSigningEncodingKey signingEncodingKey,
                                          IJwtEncryptingEncodingKey encryptingEncodingKey)
        {
            var tokenHandler    = new JwtSecurityTokenHandler();
            var expiryInMinutes = Convert.ToInt32(_configuration["Jwt:ExpiryInMinutes"]);
            var jwtToken        = tokenHandler.CreateJwtSecurityToken(
                issuer: _configuration["Jwt:Site"],
                audience: _configuration["Jwt:Site"],
                subject: new ClaimsIdentity(claims),
                notBefore: DateTime.UtcNow,
                expires: DateTime.UtcNow.AddMinutes(expiryInMinutes),
                issuedAt: DateTime.UtcNow,
                signingCredentials: new SigningCredentials(
                    signingEncodingKey.GetKey(),
                    signingEncodingKey.SigningAlgorithm),
                encryptingCredentials: new EncryptingCredentials(
                    encryptingEncodingKey.GetKey(),
                    encryptingEncodingKey.SigningAlgorithm,
                    encryptingEncodingKey.EncryptingAlgorithm));

            return(tokenHandler.WriteToken(jwtToken));
        }
示例#29
0
        public ActionResult <string> Post(
            AuthenticationRequest authRequest,
            [FromServices] IJwtSigningEncodingKey signingEncodingKey)
        {
            // 1. Проверяем данные пользователя из запроса.
            var loginResult = _serviceAuthentication.LoginUser(authRequest.Name, authRequest.Password);

            if (!loginResult.Result)
            {
                return(BadRequest(loginResult.Message));
            }

            // 2. Создаем утверждения для токена.
            var claims = new Claim[]
            {
                new Claim("KadrId", authRequest.Name),
                new Claim("KadrFullName", loginResult.KadrFullName)
            };

            // 3. Генерируем JWT.
            var expiresInMinutes = 60;

            int.TryParse(_configuration.GetSection("PdaaToken:expiresMinute").Value, out expiresInMinutes);
            var token = new JwtSecurityToken(
                issuer: _configuration.GetSection("PdaaToken:issuer").Value,     // "pdaa.asu.api",
                audience: _configuration.GetSection("PdaaToken:audience").Value, // "pdaa.asu.client",
                claims: claims,
                expires: DateTime.Now.AddMinutes(expiresInMinutes),
                signingCredentials: new SigningCredentials(
                    signingEncodingKey.GetKey(),
                    signingEncodingKey.SigningAlgorithm)
                );

            string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);

            return(jwtToken);
        }
        public ActionResult <string> Post(TokenRequest authRequest,
                                          [FromServices] IJwtSigningEncodingKey signingEncodingKey)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("Invalid Request"));
            }

            // 1. Проверяем данные пользователя из запроса.
            if (authRequest.Username != "userName" || authRequest.Password != "pass1")
            {
                return(Unauthorized());
            }


            // 2. Создаем утверждения для токена.
            var claims = new Claim[]
            {
                new Claim(ClaimTypes.NameIdentifier, authRequest.Username)
            };

            // 3. Генерируем JWT.
            var token = new JwtSecurityToken(
                issuer: "EntManSystemMvc",
                audience: "EntManSystemMvcClient",
                claims: claims,
                expires: DateTime.Now.AddMinutes(5),
                signingCredentials: new SigningCredentials(
                    signingEncodingKey.GetKey(),
                    signingEncodingKey.SigningAlgorithm)
                );

            string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);

            return(jwtToken);
        }