コード例 #1
0
        /// <summary>
        /// ОБновить жетон доступа
        /// </summary>
        /// <param name="refreshToken">Токен обновления</param>
        /// <param name="httpContext">Контекст HTTP</param>
        /// <returns>Данные о пользователе с очищенным паролем или null,
        /// при любой ошибке</returns>
        public UserModel RefreshToken(string refreshToken, HttpContext httpContext)
        {
            DateTime now     = DateTime.UtcNow; // Получаем текущие дату и время
            double   minutes = 2d;              // две минуты
            // Извлекаем из контекста HTTP тип агента пользователя
            var userAgent = httpContext.Request.Headers["User-Agent"];
            // Извлекаем из контекста HTTP IP адрес пользователя
            var ipAddress = httpContext.Connection.RemoteIpAddress;
            // Извлекаем из хранилища данные о жетоне обновления
            var refToken = tokensManager.GetRefreshToken(refreshToken, userAgent);

            if (refToken == null)   // Если жетон обновления не найден
            {
                //logger.LogWarning($"Probable hacker attack attempt for refresh token: {refreshToken}, IP : {ipAddress}");
                return(null);    // Возвращаем null
            }

            // Если IP адреса из контекста HTTP и жетона обновления не совпадают
            if (ipAddress.ToString() != refToken.IpAddress)
            {
                //logger.LogWarning($"Token not found token: {refreshToken} ");
                return(null);    // Возвращаем null
            }

            // Извлекаем из хранилища данные о пользователе по адресу электронной почты
            // с очищенным паролем
            var user = GetUserByEmail(refToken.UserEmail).WithoutPassword();

            if (user == null)   // Если пользоваитель не найден
            {
                //logger.LogWarning($" user not found for token: {refreshToken} ");
                return(null);    // Возвращаем null
            }

            // Генерируем новый эетон доступа
            string newToken = GenerateToken(userAgent, user, now, minutes);

            // Обновляем жетон обновления для текущего типа агента пользователя
            refToken = tokensManager.UpdateToken(refToken.RefreshToken, userAgent);
            // Устанавливам для пользователя жетон обновления
            user.RefreshToken = refToken.RefreshToken;
            // Устанавливаем время истечения срока действия жетона
            user.TokenExpireTimes = now.AddMinutes(minutes);    // 2 минуты
            // Устанавливаем новый жетон доступа
            user.Token = newToken;
            // Возвращаем данные о пользоваителе
            return(user);
        }
コード例 #2
0
        public UserModel RefreshToken(string refreshToken, HttpContext httpContext)
        {
            DateTime now       = DateTime.UtcNow;
            double   minutes   = 2d;
            var      userAgent = httpContext.Request.Headers["User-Agent"];
            var      ipAddress = httpContext.Connection.RemoteIpAddress;
            var      refToken  = tokensManager.GetRefreshToken(refreshToken, userAgent);

            if (refToken == null)
            {
                //logger.LogWarning($"Probable hacker attack attempt for refresh token: {refreshToken}, IP : {ipAddress}");
                return(null);
            }

            if (ipAddress.ToString() != refToken.IpAddress)
            {
                //logger.LogWarning($"Token not found token: {refreshToken} ");
                return(null);
            }

            var user = GetUserByEmail(refToken.UserEmail).WithoutPassword();

            if (user == null)
            {
                //logger.LogWarning($" user not found for token: {refreshToken} ");
                return(null);
            }

            string newToken = GenerateToken(userAgent, user, now, minutes);

            refToken              = tokensManager.UpdateToken(refToken.RefreshToken, userAgent);
            user.RefreshToken     = refToken.RefreshToken;
            user.TokenExpireTimes = now.AddMinutes(minutes);
            user.Token            = newToken;
            return(user);
        }