Пример #1
0
        public async Task <ActionResult <TokenResponse> > Post(AuthRequest request)
        {
            var pHash = Sha256Manager.GetHash(Encoding.UTF8.GetBytes(request.Login + request.Password + "6998AD68-8F11-41B2-9627-CBC34C5E68C4"));
            var user  = await _postgresDbContext.Users.FirstOrDefaultAsync(u => u.Login.Equals(request.Login));

            if (user != null)
            {
                if (!user.Password.SequenceEqual(pHash))
                {
                    return(new ConflictResult());
                }
            }
            else
            {
                user = new UserEntity
                {
                    Login    = request.Login,
                    Password = pHash,
                    Role     = Roles.User
                };
                await _postgresDbContext.Users.AddAsync(user);

                await _postgresDbContext.SaveChangesAsync();
            }

            var jwtSettings = new JwtSettings(DateTime.UtcNow);

            _configuration.GetSection(nameof(JwtSettings))
            .Bind(jwtSettings);

            var claims = new[]
            {
                new Claim(nameof(UserEntity.Id), user.Id.ToString()),
                new Claim(ClaimsIdentity.DefaultNameClaimType, user.Login),
                new Claim(ClaimsIdentity.DefaultRoleClaimType, user.Role.ToString()),
                new Claim(nameof(TokenResponse.Expires), jwtSettings.Expires.ToString())
            };

            var jwt = new JwtSecurityToken(
                jwtSettings.Issuer,
                jwtSettings.Audience,
                notBefore: jwtSettings.Now.UtcDateTime,
                claims: claims,
                expires: jwtSettings.Expires.UtcDateTime,
                signingCredentials: new SigningCredentials(jwtSettings.GetSymmetricSecurityKey(), SecurityAlgorithms.HmacSha256)
                );

            var result = new TokenResponse
            {
                Token   = new JwtSecurityTokenHandler().WriteToken(jwt),
                Expires = jwtSettings.Expires
            };

            return(new JsonResult(result));
        }
Пример #2
0
 public Task <int> SaveAsync()
 {
     return(_context.SaveChangesAsync());
 }