示例#1
0
        public async Task <IActionResult> GetToken([FromBody] UserCredentialsForTokenDto credentials)
        {
            var data = await _userService.GetToken(credentials);

            return(Ok(new
            {
                token = data
            }));
        }
        private async Task <ClaimsIdentity> GetIdentity(UserCredentialsForTokenDto credentials)
        {
            var currentUser = await _context.Users.FirstOrDefaultAsync(x => x.Username == credentials.UserName &&
                                                                       x.Password == credentials.Password);

            if (currentUser != null)
            {
                var claims = new List <Claim>
                {
                    new Claim(ClaimsIdentity.DefaultNameClaimType, currentUser.Username),
                    new Claim(ClaimsIdentity.DefaultRoleClaimType, currentUser.Role.ToString())
                };
                ClaimsIdentity claimsIdentity =
                    new ClaimsIdentity(claims, "Token", ClaimsIdentity.DefaultNameClaimType,
                                       ClaimsIdentity.DefaultRoleClaimType);
                return(claimsIdentity);
            }
            return(null);
        }
        public async Task <string> GetToken(UserCredentialsForTokenDto credentials)
        {
            var identity = await GetIdentity(credentials);

            if (identity == null)
            {
                throw new UserNotFoundException();
            }
            var now = DateTime.UtcNow;
            var jwt = new JwtSecurityToken(
                issuer: AuthOptions.ISSUER,
                audience: AuthOptions.AUDIENCE,
                notBefore: now,
                claims: identity.Claims,
                expires: now.Add(TimeSpan.FromMinutes(AuthOptions.LIFETIME)),
                signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(),
                                                           SecurityAlgorithms.HmacSha256));
            var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);

            return(encodedJwt);
        }