public async Task <GenerateTokenAnswer> Handle(GenerateTokenRequest request, CancellationToken cancellationToken)
        {
            var tokenHandler    = new JwtSecurityTokenHandler();
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new ClaimsIdentity(new[]
                {
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                    new Claim("id", request.UserId.ToString()),
                }),
//            LifeTime: 5 Minutes by default + 0.01 minutes
                Expires            = DateTime.UtcNow.AddMinutes(0.01),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(_jwtOptions.SecretInBytes),
                                                            SecurityAlgorithms.HmacSha256Signature)
            };

            var token = tokenHandler.CreateToken(tokenDescriptor);

            var tempCommand = new WriteTokenCommand
            {
                UserId     = request.UserId,
                ExpiryDate = DateTime.UtcNow.AddYears(2),
                JwtId      = token.Id,
                Platform   = request.Platform,
                Token      = tokenHandler.WriteToken(token),
            };

            await _commandHandler.HandleAsync(tempCommand);

            return(new GenerateTokenAnswer
            {
                Token = tempCommand.Token,
            });
        }
Пример #2
0
        private async Task <Guid> GenerateToken(Guid userId)
        {
            var tokenId = Guid.NewGuid();

            await _mediator.Send(new DeactivateTokenCommand
            {
                UserId = userId,
            });

            var tempCommand = new WriteTokenCommand
            {
                Id     = tokenId,
                UserId = userId,
            };

            await _mediator.Send(tempCommand);

            return(tokenId);
        }