コード例 #1
0
        public async Task RefreshTokensAsync()
        {
            var oldTokens = await this.botState.UserTokensAccessor.GetAsync(this.turnContextResolver.TurnContext);

            string uri = "auth/refresh";

            RefreshTokensModel model = new RefreshTokensModel()
            {
                RedirectUri  = this.authAppConfigs.RedirectUri,
                RefreshToken = oldTokens.RefreshToken,
            };

            var newTokens = await this.PostAsync <TokensModel>(model, uri, isAuthenticated : false);

            await this.botState.UpdateTokensAsync(this.turnContextResolver.TurnContext, newTokens);
        }
コード例 #2
0
        public async Task <UserDTO> RefreshAccessToken(RefreshTokensModel refreshTokensModel)
        {
            var principal = Principal.GetPrincipalFromExpiredToken(refreshTokensModel.AccessToken, _sensitiveTokens);
            var email     = principal.Identity.Name;

            var user = await _unitOfWork.UserRepository.GetByEmail(email);

            if (user.RefreshToken != null)
            {
                var savedRefreshToken = user.RefreshToken;
                if (savedRefreshToken != refreshTokensModel.RefreshToken)
                {
                    throw new SecurityTokenException("Invalid refresh token");
                }

                else
                {
                    user.Token = AccessToken.GenerateToken(user, _sensitiveTokens);
                    var currentTime = DateTime.ParseExact(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
                    if (currentTime > user.RefreshTokenExiparionDate)
                    {
                        user.RefreshToken = RefreshToken.GenerateToken();
                        user.RefreshTokenExiparionDate = DateTime.Now.Date.AddDays(_sensitiveTokens.RefreshTokenLifetime);
                    }

                    await _unitOfWork.UserRepository.Update(user);

                    _unitOfWork.SaveChanges();

                    var userDTO = _mapper.Map <UserDTO>(user);

                    return(userDTO);
                }
            }
            else
            {
                throw new SecurityTokenException("No refresh token id db");
            }
        }
コード例 #3
0
        public async Task <IActionResult> RefreshToken([FromBody] RefreshTokensModel tokens)
        {
            var user = await _userService.RefreshAccessToken(tokens);

            return(Ok(user));
        }