コード例 #1
0
        public async Task <TokenDTO> Create(ApplicationUser user, IEnumerable <string> roles)
        {
            var tokenHandler = new JwtSecurityTokenHandler();
            var key          = Encoding.ASCII.GetBytes(_JWTSettings.Secret);

            var cliams = new List <Claim>();

            cliams.Add(new Claim(ClaimTypes.Name, user.Id));
            roles.ToList().ForEach(r => cliams.Add(new Claim(ClaimTypes.Role, r)));

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(cliams),
                Expires            = DateTime.Now.AddMinutes(_JWTSettings.MinutesLife),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key),
                                                            SecurityAlgorithms.HmacSha256Signature),
            };

            var token        = tokenHandler.WriteToken(tokenHandler.CreateToken(tokenDescriptor));
            var refreshToken = _refreshTokenFactory.Create(token, user.UserName);

            await _refreshTokenRepository.Create(refreshToken);

            var tokenDTO = new TokenDTO()
            {
                AccessToken  = token,
                RefreshToken = refreshToken.Token,
                Roles        = roles,
                Email        = user.Email,
                Id           = user.Id
            };

            return(tokenDTO);
        }
コード例 #2
0
        private async Task <AuthTokenModel> GenerateToken(User user)
        {
            var tokenHandler = new JwtSecurityTokenHandler();
            var key          = Encoding.ASCII.GetBytes(authorizationConfigs.TokenKey);

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject = new ClaimsIdentity(
                    new[]
                {
                    new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
                    new Claim(ClaimTypes.Email, user.Email),
                }),
                Expires            = DateTime.UtcNow.AddMinutes(authorizationConfigs.TokenExpiratinInMinutes),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
            };

            var token        = tokenHandler.CreateToken(tokenDescriptor);
            var refreshToken = GenerateRefreshToken();

            await refreshTokenRepository.Create(new RefreshToken()
            {
                UserId = user.Id,
                Token  = refreshToken
            });

            return(new AuthTokenModel
            {
                Token = tokenHandler.WriteToken(token),
                ExpiredIn = new DateTimeOffset(tokenDescriptor.Expires.Value).ToUnixTimeMilliseconds(),
                RefreshToken = refreshToken
            });
        }
コード例 #3
0
        public async Task CreateRefreshToken_ShouldReturnTheCreatedRefreshToken_AndIncreaseTheRefreshTokensCount()
        {
            var refreshToken = new RefreshTokenEntity
            {
                Id    = 444,
                Token = "token 123",
                User  = new UserEntity
                {
                    UserName = "******",
                    Email    = "*****@*****.**"
                }
            };
            var expectedNumberOfRefreshTokens = DbContext.RefreshTokens.Count() + 1;

            // Act
            var createdRefreshToken = await _refreshTokenRepository.Create(refreshToken);

            // Assert
            Assert.NotNull(createdRefreshToken);
            Assert.Equal(refreshToken.Token, createdRefreshToken.Token);
            Assert.Equal(refreshToken.User.UserName, createdRefreshToken.User.UserName);
            Assert.Equal(refreshToken.User.Email, createdRefreshToken.User.Email);
            Assert.True(refreshToken.Id != 0);
            Assert.Equal(expectedNumberOfRefreshTokens, DbContext.RefreshTokens.Count());
        }
コード例 #4
0
        /// <summary>
        /// To save a given refresh token using the token repository
        /// </summary>
        /// <param name="refreshToken"></param>
        /// <returns>Task/bool</returns>
        public async Task <bool> SaveRefreshToken(RefreshToken refreshToken)
        {
            await _refreshTokenRepository.Create(refreshToken);

            var result = await _refreshTokenRepository.Save();

            return(result > 0);
        }
コード例 #5
0
 public Task <RefreshTokenEntity> Create(string token, DateTime validFor, UserEntity user)
 {
     return(_refreshTokenRepository.Create(new RefreshTokenEntity
     {
         Token = token,
         User = user,
         ValidFor = validFor,
     }));
 }
コード例 #6
0
 public async Task RegisterRefreshToken(string refreshToken, Guid userId)
 {
     await _refreshTokenRepository.Create(new RefreshToken
     {
         Id             = Guid.Parse(refreshToken),
         UserId         = userId,
         ExpirationDate = DateTimeOffset.Now.AddDays(RefreshTokenLifeTime)
     });
 }
コード例 #7
0
        public async Task <AccessTokenDto> CreateAccessTokenAsync(User user)
        {
            var jwtToken     = GenerateJwtToken(CreateUserClaims(user));
            var refreshToken = new RefreshToken
            {
                UserId = user.Id,
                Token  = GenerateRefreshToken()
            };

            if (await _refreshTokenRepository.AnyByUserIdAsync(user.Id))
            {
                _refreshTokenRepository.Update(refreshToken);
            }
            else
            {
                _refreshTokenRepository.Create(refreshToken);
            }

            await _saveProvider.SaveAsync();

            return(new AccessTokenDto {
                RefreshToken = refreshToken.Token, Token = jwtToken
            });
        }
        public async Task <Guid> Generate(ApplicationUser user, string ipAddress)
        {
            var refreshTokenValue = Guid.NewGuid();
            var refreshToken      = new RefreshToken()
            {
                CreatedByIp    = ipAddress,
                CreateDateTime = DateTime.Now,
                ExpireDateTime = DateTime.Now.AddDays(1),
                Token          = refreshTokenValue,
                UserId         = user.Id
            };
            await refreshTokenRepository.Create(refreshToken);

            return(refreshTokenValue);
        }
コード例 #9
0
        public async Task <AuthenticatedUserResponse> Authenticate(User user)
        {
            string accessToken  = _accessTokenGenerator.GenerateToken(user);
            string refreshToken = _refreshTokenGenerator.GenerateToken();

            RefreshToken refreshTokenDTO = new RefreshToken()
            {
                Token  = refreshToken,
                UserId = user.Id
            };
            await _refreshTokenRepository.Create(refreshTokenDTO);

            return(new AuthenticatedUserResponse()
            {
                AccessToken = accessToken,
                RefreshToken = refreshToken
            });
        }
コード例 #10
0
ファイル: SessionService.cs プロジェクト: fossapps/Micro.Auth
        public async Task <LoginSuccessResponse> Login(LoginRequest request)
        {
            var user = await _userManager.GetUserByLogin(request.Login);

            if (user == null)
            {
                throw new UserNotFoundException();
            }

            var signInResult = await _signInManager.PasswordSignInAsync(user, request.Password, false, true);

            if (!signInResult.Succeeded)
            {
                throw new InvalidCredentialsException(ProcessErrorResult(signInResult));
            }
            var principal = await _signInManager.CreateUserPrincipalAsync(user);

            var jwt = _tokenFactory.GenerateJwtToken(principal);

            if (principal.IsServiceAccount())
            {
                return(new LoginSuccessResponse
                {
                    Jwt = jwt,
                });
            }
            var refreshToken = await _refreshTokenRepository.Create(new RefreshToken
            {
                Location  = request.Location,
                User      = user.Id,
                Useragent = request.UserAgent,
                IpAddress = request.IpAddress,
                LastUsed  = DateTime.Now,
                Value     = _uuidService.GenerateUuId("session"),
            });

            return(new LoginSuccessResponse
            {
                Jwt = jwt,
                RefreshToken = refreshToken.Value,
            });
        }
コード例 #11
0
        public async Task <Result> HandleAsync(CreateRefreshTokenCommand command)
        {
            if (!(await VerifyNotExisting(command.TicketId)).Succeeded)
            {
                return(await Task.FromResult(Result.Fail($"RefreshToken {command.TicketId} is already register in the system")));
            }

            var token = new RefreshToken
            {
                Id         = new RefreshTokenId(Guid.NewGuid().ToString()),
                TicketId   = command.TicketId,
                ClientId   = new Domain.Membership.Clients.ClientId(command.ClientId),
                UserId     = new Domain.Membership.IdentityUserId(command.UserId),
                IpAddress  = command.IpAddress,
                ExpiresUtc = command.ExpiresUtc,
                IssuedUtc  = command.IssuedUtc
            };

            await _repo.Create(token);

            return(Result.Ok());
        }
コード例 #12
0
        private async Task <string> GenerateRefreshToken(Guid userId)
        {
            await _refreshTokenRepository.DeleteExpired(userId);

            var randomNumber = new byte[256];

            using (var rng = RandomNumberGenerator.Create())
            {
                rng.GetBytes(randomNumber);

                var token = Convert.ToBase64String(randomNumber);

                _refreshTokenRepository.Create(new RefreshToken
                {
                    UserId         = userId,
                    Value          = token,
                    ExpirationDate = DateTime.Now.AddDays(14)
                });

                await _refreshTokenRepository.SaveChanges();

                return(token);
            }
        }
コード例 #13
0
 private async Task CreateToken(RefreshToken refreshToken)
 {
     refreshToken.Token     = tokenService.CreateRefreshToken();
     refreshToken.ExpiresAt = timeService.GetCurrentTime().AddDays(30);
     await refreshTokenRepo.Create(refreshToken);
 }