Beispiel #1
0
        public async Task <JwtAuthResult> GenerateToken(UserDto userDto, DateTime now)
        {
            if (userDto == null)
            {
                throw new NullReferenceException("UserDto was null");
            }

            var claims = new Claim[]
            {
                new (ClaimTypes.Name, userDto.UserName),
                new (ClaimTypes.Email, userDto.Email),
                new (ClaimTypes.Role, userDto.Role),
                new (JwtRegisteredClaimNames.Sub, userDto.UserName),
                new (JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
            };

            var jwtToken = new JwtSecurityToken(_configuration["Jwt:Issuer"],
                                                _configuration["Jwt:Audience"],
                                                claims,
                                                expires: now.AddMinutes(Convert.ToDouble(_configuration["Jwt:DurationInMinutes"])),
                                                signingCredentials: new SigningCredentials(
                                                    new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"])),
                                                    _configuration["Jwt:SecurityAlg"]));

            var accessToken = new JwtSecurityTokenHandler().WriteToken(jwtToken);

            var refreshToken = new RefreshTokenDto()
            {
                Id       = Guid.NewGuid(),
                UserId   = userDto.Id,
                ExpireAt = now.AddMinutes(Convert.ToDouble(_configuration["Jwt:ExpiresInMinutes"]))
            };

            await _refreshTokenService.AddOrUpdate(refreshToken);

            return(new JwtAuthResult()
            {
                AccessToken = accessToken,
                RefreshToken = refreshToken
            });
        }