Как истекает срок действия обновления / обновления токена JWT (Json Web Token) после того, как этот угловой проект не будет интерактивным в течение 15 минут - PullRequest
0 голосов
/ 18 июня 2019

У меня есть угловой проект, в котором я зарегистрировал токен JWT в качестве службы аутентификации для Серверный проект ASP.Net Core API , что-то вроде

Startup.cs

public void ConfigureServices(IServiceCollection services)
        {

 services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = "JwtBearer";
                options.DefaultChallengeScheme = "JwtBearer";
            })
            .AddJwtBearer("JwtBearer", jwtBearerOptions =>
            {
                jwtBearerOptions.TokenValidationParameters =
              new TokenValidationParameters
              {
                  ValidateIssuerSigningKey = true,
                  IssuerSigningKey = new SymmetricSecurityKey(
                  Encoding.UTF8.GetBytes(jsonWebToken.Key)),
                  ValidateIssuer = true,
                  ValidIssuer = jsonWebToken.Issuer,

                  ValidateAudience = true,
                  ValidAudience = jsonWebToken.Audience,

                  ValidateLifetime = true,
                  ClockSkew = TimeSpan.FromMinutes(
                         jsonWebToken.MinutesToExpiration)
              };
            });
        }

и я определил ClockSkew (или MinutesToExpiration) на 15 минут, поэтому срок действия этого токена JWT всегда истекает через 15 минут, независимо от того, работает пользователь над приложением (активно) или нет (без интерактива).

, ноЯ просто ищу решение, по которому срок действия токена jwt истекает через 15 минут, когда пользователь не активен (никакого взаимодействия с пользовательским интерфейсом нет)

Так что я думаю, что это может как-то продлить срок действия еще на 15 минут, но я не могу с этим справиться.

Поэтому мой вопрос заключается в том, как я могу продлить / изменить время истечения во внешнем токене (чтобы я хранил его в локальном хранилище) после каждого ответа на запрос отсервер.

Заранее благодарим за помощь в этом вопросе.

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Поскольку вы используете JWT, изменение времени истечения приведет к изменению самого токена.Даже если вы сделаете это, теоретически пользователь может продолжать использовать «старую» версию JWT, пока не истечет время его истечения (это не должно быть проблемой как таковое, если вы не решите изменить какую-либо другую информацию).в полезной нагрузке JWT) - хотя это работает, это не совсем чистое решение проблемы.Поэтому я предлагаю не использовать токены JWT, а просто использовать «непрозрачные» токены.Или, если вы должны использовать JWT, тогда:

  • Используйте два токена: токен не-JWT (назовем его токеном обновления) и один токен доступа JWT.

  • Время жизни токена доступа <15 минут, а время жизни маркера обновления = 15 минут. </p>

  • Отправьте токен доступа для каждого вызова API для аутентификации.Если срок его действия истек, отправьте токен обновления в специальную конечную точку, чтобы получить новый токен доступа, и продлите срок службы токена обновления на 15 минут (помните, токен обновления не является JWT, поэтому его значение не изменится).Если срок действия маркера обновления также истек, пользователь должен снова войти в систему.

Если вы хотите повысить безопасность с точки зрения обнаружения кражи токена (возможно только при использовании обоих этих токенов), вы можететакже меняйте токен обновления каждый раз, когда он используется - см. https://tools.ietf.org/html/rfc6819#section-5.2.2.3. Но это не тривиально (см. https://hackernoon.com/the-best-way-to-securely-manage-user-sessions-91f27eeef460)

. Кроме того, я заметил, что вы используете localalstorage для хранения токенов сессий - лично я чувствуюэто не очень хорошая идея, так как она открывает ваш код для атак XSS.Я знаю, что хранение токенов в куки открывает их для атаки CSRF, но я считаю, что с этим легче справиться +, если вы хотите большей безопасности, вы могли бы иметьнекоторая часть токенов аутентификации хранится в localalstorage, а другая - в cookie-файлах (secure & HttpOnly). Таким образом, оба типа атак будут бесполезны.

Чтобы узнать больше о безопасности сеанса, особенно о JWTсм. этот пост в блоге: https://hackernoon.com/all-you-need-to-know-about-user-session-security-ee5245e6bdad

Кроме того, полное раскрытие, я являюсь автором этого блога и библиотеки, в которой я работал.Король этого предоставляет комплексное, сверхбезопасное решение для управления сеансами.Хотя он еще не реализован для .Net, я буду рад сделать это в зависимости от вашего варианта использования.Вот ссылка на репозиторий GitHub для реализации: https://github.com/supertokens/supertokens-node-mysql-ref-jwt

Надеюсь, этот ответ поможет.

0 голосов
/ 18 июня 2019

Пожалуйста, посмотрите на ng-idle / keepalive, есть даже видеоурок на youtube, сделанный по программированию с naveen https://github.com/programmingwithnaveen/Session-Timeout

...