コード例 #1
0
        public async Task <JsonWebToken> CreateAccessTokenAsync(string token)
        {
            var refreshToken = await _refreshTokenRepository.GetAsync(token);

            if (refreshToken == null)
            {
                throw new VirtualMarketException(Codes.RefreshTokenNotFound,
                                                 "Refresh token was not found.");
            }
            if (refreshToken.Revoked)
            {
                throw new VirtualMarketException(Codes.RefreshTokenAlreadyRevoked,
                                                 $"Refresh token: '{refreshToken.Id}' was revoked.");
            }
            var user = await _userRepository.GetAsync(refreshToken.UserId);

            if (user == null)
            {
                throw new VirtualMarketException(Codes.UserNotFound,
                                                 $"User: '******' was not found.");
            }
            var claims = await _claimsProvider.GetAsync(user.Id);

            var jwt = _jwtHandler.CreateToken(user.Id.ToString("N"), user.Role, claims);

            jwt.RefreshToken = refreshToken.Token;
            await _busPublisher.PublishAsync(new AccessTokenRefreshed(user.Id), CorrelationContext.Empty);

            return(jwt);
        }
コード例 #2
0
        public async Task <JsonWebToken> SignInAsync(string email, string password)
        {
            var identity = await _identityRepository.FirstOrDefaultAsync(x => x.Email == email);

            if (identity == null || !identity.ValidatePassword(password, _passwordHasher))
            {
                throw new AdsboardException(Codes.InvalidCredentials,
                                            "Invalid credentials.");
            }
            var refreshToken = new RefreshToken(identity, _passwordHasher);
            var claims       = await _claimsProvider.GetAsync(identity.Id);

            var jwt = _jwtHandler.CreateToken(identity.Id.ToString("N"), identity.Role, claims);

            jwt.RefreshToken = refreshToken.Token;
            jwt.Email        = identity.Email;

            await _refreshTokenRepository.AddAsync(refreshToken);

            var savingResult = await _dbContext.SaveChangesAsync();

            if (savingResult == 0)
            {
                throw new AdsboardException(Codes.SavingError,
                                            $"An error occured during saving data.");
            }

            return(jwt);
        }
コード例 #3
0
        public async Task <JsonWebToken> CreateAccessTokenAsync(string token)
        {
            var refreshToken = await _refreshTokenRepository.FirstOrDefaultAsync(x => x.Token == token);

            if (refreshToken == null)
            {
                throw new AdsboardException(Codes.RefreshTokenNotFound,
                                            "Refresh token was not found.");
            }
            if (refreshToken.Revoked)
            {
                throw new AdsboardException(Codes.RefreshTokenAlreadyRevoked,
                                            $"Refresh token: '{refreshToken.Id}' was revoked.");
            }
            var identity = await _identityRepository.FirstOrDefaultAsync(x => x.Id == refreshToken.IdentityId);

            if (identity == null)
            {
                throw new AdsboardException(Codes.IdentityNotFound,
                                            $"identity: '{refreshToken.IdentityId}' was not found.");
            }
            var claims = await _claimsProvider.GetAsync(identity.Id);

            var jwt = _jwtHandler.CreateToken(identity.Id.ToString("N"), identity.Role, claims);

            jwt.RefreshToken = refreshToken.Token;
            // await _busPublisher.PublishAsync(new AccessTokenRefreshed(identity.Id), CorrelationContext.Empty);

            return(jwt);
        }
コード例 #4
0
        public async Task <JsonWebToken> CreateAccessTokenAsync(string refreshToken)
        {
            var rToken = await _refreshTokenRepository.GetAsync(rt => rt.Token == refreshToken);

            if (rToken == null)
            {
                throw new JppcException(Codes.RefreshTokenNotFound, "Refresh token was not found.");
            }

            if (rToken.Revoked)
            {
                throw new JppcException(Codes.RefreshTokenAlreadyRevoked, $"Refresh token : '{refreshToken}' was revoked.");
            }

            var user = await _userRepository.GetAsync(rToken.UserId);

            if (user == null)
            {
                throw new JppcException(Codes.UserNotFound, $"User: '******' was not found.");
            }
            var claims = await _claimsProvider.GetAsync(user.Id);

            var jwt = _jwtHandler.CreateToken(user.Id.ToString("N"), claims);

            jwt.RefreshToken = rToken.Token;

            return(jwt);
        }
コード例 #5
0
        public async Task <JsonWebToken> CreateAccessTokenAsync(string token)
        {
            var refreshToken = await _refreshTokenRepository.GetAsync(token);

            if (refreshToken is null)
            {
                throw new ServiceException(ExceptionCode.RefreshTokenNotFound,
                                           "Refresh token was not found.");
            }

            if (refreshToken.Revoked)
            {
                throw new ServiceException(ExceptionCode.RefreshTokenAlreadyRevoked,
                                           "Refresh token: '{refreshToken.Id}' was revoked.");
            }

            var user = await _userRepository.GetAsync(refreshToken.UserId);

            if (user is null)
            {
                throw new ServiceException(ExceptionCode.UserNotExists,
                                           $"User: '******' was not found.");
            }

            var claims = await _claimsProvider.GetAsync(user.Id);

            var jwt = _jwtHandler.CreateToken(user.Id.ToString("N"), user.Role, claims);

            jwt.RefreshToken = refreshToken.Token;

            return(jwt);
        }
コード例 #6
0
        public async Task <JsonWebToken> CreateAccessTokenAsync(string token)
        {
            var refreshToken = await _refreshTokenRepository.GetAsync(token);

            if (refreshToken == null)
            {
                throw new ToolBoxException(Codes.RefreshTokenNotFound,
                                           "Refresh token was not found.");
            }
            //var user = await _userRepository.GetAsync(refreshToken.UserId);
            if (refreshToken.User == null || refreshToken.UserId == null || refreshToken.UserId == Guid.Empty)
            {
                throw new ToolBoxException(Codes.UserNotFound,
                                           $"User: '******' was not found.");
            }

            var claims = await _claimsProvider.GetAsync(refreshToken.User);

            var jwt = _jwtHandler.CreateToken(refreshToken.UserId.ToString(), null, claims);

            jwt.RefreshToken = refreshToken.Token;
            await _busClient.PublishAsync(new AccessTokenRefreshed(Guid.NewGuid(), refreshToken.UserId));

            // await _busClient.PublishAsync(new AccessTokenRefreshed(user.Id), CorrelationContext.Empty);

            return(jwt);
        }
コード例 #7
0
        public async Task <JsonWebToken> SignInAsync(string email, string password)
        {
            var user = await _userRepository.GetAsync(email);

            if (user == null || !user.ValidatePassword(password, _passwordHasher))
            {
                throw new ToolBoxException(Codes.InvalidCredentials,
                                           "Invalid credentials.");
            }
            var refreshToken = new RefreshToken();

            refreshToken.SetToken(user, _passwordHasher);
            var claims = await _claimsProvider.GetAsync(user);

            var jwt = _jwtHandler.CreateToken(user.Id.ToString(), null, claims);

            jwt.RefreshToken = refreshToken.Token;

            if (user.RefreshToken != null)
            {
                user.RefreshToken.Token = refreshToken.Token;
                user.RefreshToken.SetUpdatedDate();
            }
            else
            {
                await _refreshTokenRepository.AddAsync(refreshToken);

                user.RefreshToken   = refreshToken;
                user.RefreshTokenId = refreshToken.Id;
            }
            await _userRepository.UpdateAsync(user);

            return(jwt);
        }
コード例 #8
0
        public async Task <JsonWebToken> SignInAsync(string email, string password)
        {
            var user = await _userRepository.GetAsync(email);

            if (user == null || !user.ValidatePassword(password, _passwordHasher))
            {
                throw new DSNException(Codes.InvalidCredentials, "Invalid credentials");
            }
            var refreshToken = new RefreshToken(user, _passwordHasher);
            var claims       = await _claimsProvider.GetAsync(user.Id);

            var jwt = _jwtHandler.CreateToken(user.Id.ToString("N"), user.Role, claims);

            jwt.RefreshToken = refreshToken.Token;
            //Add refresh token after
            return(jwt);
        }
コード例 #9
0
        public async Task <JsonWebToken> SignInAsync(string email, string password)
        {
            var user = await _userRepository.GetAsync(email);

            if (user == null || !user.ValidatePassword(password, _passwordHasher))
            {
                throw new MicroSException(Codes.InvalidCredentials, "Invalid credentials.");
            }
            var refreshToken = new dto.RefreshToken(user, _passwordHasher);
            var claims       = await _claimsProvider.GetAsync(user.Id);

            var jwt = _jwtHandler.CreateToken(user.Id.ToString("N"), user.Role, claims);

            jwt.RefreshToken = refreshToken.Token;
            await _refreshTokenRepository.AddAsync(refreshToken);

            await _busPublisher.PublishAsync(new SignedIn(user.Id), CorrelationContext.Empty);

            return(jwt);
        }
コード例 #10
0
        public async Task <JsonWebToken> SignInAsync(string username, string password)
        {
            var user = await _userRepository.GetAsync(username);

            if (user == null || !user.VerifyHashedPassword(password, _passwordHasher))
            {
                throw new S3Exception(ExceptionCodes.InvalidCredentials,
                                      "Invalid credentials.");
            }
            var refreshToken = new RefreshToken(user, _passwordHasher);
            var claims       = await _claimsProvider.GetAsync(user);

            //var claims = await _claimsProvider.GetAsync(user.Id);
            var jwt = _jwtHandler.CreateToken(user.Id.ToString("N"), user.Roles, claims);

            jwt.RefreshToken = refreshToken.Token;
            await _refreshTokenRepository.AddAsync(refreshToken);

            return(jwt);
        }
コード例 #11
0
        public async Task <JsonWebToken> Handle(SignIn request, CancellationToken cancellationToken)
        {
            var email    = request.Email;
            var password = request.Password;

            var user = await _userRepository.GetAsync(email);

            if (user == null || !user.ValidatePassword(password, _passwordHasher))
            {
                throw new IdentityException(Codes.InvalidCredentials,
                                            "Invalid credentials.");
            }

            var refreshToken = new RefreshToken(user, _passwordHasher);
            var claims       = await _claimsProvider.GetAsync(user.Id);

            var jwt = _jwtService.CreateToken(user.Id.ToString("N"), user.Role, claims);

            jwt.RefreshToken = refreshToken.Token;
            await _refreshTokenRepository.AddAndSaveAsync(refreshToken);

            return(jwt);
        }