Esempio n. 1
0
        public async Task <ActionResult <AuthResponse> > LoginRefreshToken([FromBody] LoginRefreshTokenModel inputModel)
        {
            if (InvalidModelState(out var invalidResponse))
            {
                return(invalidResponse);
            }

            var reasonResult = await _userManager.LoginWithRefreshTokenAsync(inputModel);

            return(BuildResponse(reasonResult));
        }
Esempio n. 2
0
        public async Task <ReasonResult <AuthResponse> > LoginWithRefreshTokenAsync(LoginRefreshTokenModel inputModel)
        {
            var query = (
                from userToken in _dbContext.UserTokens
                join applicationUser in _dbContext.ApplicationUsers on userToken.UserId equals applicationUser.Id
                where
                userToken.LoginProvider == AuthSettings.RefreshTokenProvider &&
                userToken.Name == AuthSettings.RefreshTokenName &&
                userToken.Value == inputModel.RefreshToken
                select new
            {
                ApplicationUser = applicationUser,
                Token = userToken
            }
                );

            var data = await query.FirstOrDefaultAsync();

            if (data == null)
            {
                return(ReasonResult <AuthResponse> .BadRequest(new Reason[] { new Reason("RefreshTokenNotFound", "Cannot find Refresh Token") }));
            }

            var    user         = data.ApplicationUser;
            string refreshToken = data.Token.Value;

            bool verify = await _userManager.VerifyUserTokenAsync(user, AuthSettings.RefreshTokenProvider, AuthSettings.RefreshTokenName, refreshToken);

            if (!verify)
            {
                return(ReasonResult <AuthResponse> .BadRequest(new Reason[] { new Reason("RefreshTokenInvalid", "Refresh Token is invalid") }));
            }

            string accessToken = _jwtGenerator.GenerateToken(user, out var expires);
            var    output      = new AuthResponse(accessToken, refreshToken, expires);

            return(ReasonResult <AuthResponse> .Success(output));
        }