2016-01-10 2 views
0

Я новичок в ReST и я реализации RESTful проверки подлинности маркеров, пытаясь использовать Django-Rest-Framework JWT, в мобильном веб-приложение стандартным способомStateless Токен Auth безопасности

  • клиент отправляет учетные данные
  • сервер проверяет и отправляет токен и дату истечения срока действия. Удаляет маркер из БДА
  • клиент вызывает обновление маркеров, когда пользователь делает запрос и токен истекают в
  • на запросе клиента, сервер проверяет подпись лексемы
  • на истек пользователь лексем журналов мобильных приложений вне. Мобильные приложения проверяет действия не сервер

я решил сделать мобильное приложение проверить срок годности, так как я прочитал, что это RESTful, а сервер проверки его требует, чтобы хранить маркеры, которые не RESTful

у меня есть несколько вопросов безопасности, связанных с вышеуказанной реализацией:

1) Не получает ли один токен, чтобы злоумышленник имел полный доступ к логину пользователя, независимо от того, сколько обновляется токенов?

Даже если это связано с https, скажем, каким-то образом маркер был извлечен злоумышленником, то есть прокси-сервер ssl-перехватчика. Очевидно, что мобильное приложение не позволит им войти в систему, но они могут захватывать данные, вызывая api с помощью токен через любой HTTP-клиент.

2) Какова цель обновления световых жетонов, если сервер считает все их действительными?

В этом нет никакой передовой безопасности. Однако, если сервер сохранил токены и сохранил даты истечения срока действия, полный компрометация пользователя будет остановлена, но не на компромисс между сеансами. Очевидно, что с помощью перехватчика SSL они все равно могут скомпрометировать пользователя, но нужно будет ловить каждый логин. Однако эта реализация не является пересмотренной.

ответ

1

Прежде всего, истекшие жетоны являются действительными токенами, но вы можете проверить, не истекал ли токен или нет, прежде чем принять какое-либо действие, и отменить те, которые истекли. Есть несколько вещей, которые вы можете сделать для повышения безопасности своего приложения:

  • Вы можете добавить хешированный пароль внутри токена. Поэтому, если пользователь потерял свой мобильный телефон, когда пароль был изменен на другом устройстве, вы можете отклонить маркеры со старым хэшем пароля.

  • Это не совсем успокоительно, но не так уж плохо: вы можете добавить таблицу, названную revokedTokens в db, которая отслеживает идентификатор токенов (очевидно, вы должны добавить его в токен), пользователь отменяет, если вы получаете запрос с этим токеном позже, вы можете отклонить его до истечения срока его действия. по истечении этого срока вы можете удалить из таблицы, поскольку истекшие жетоны не будут проблемой в любом случае.

  • Вы можете добавить имя хоста устройства, когда пользователь входит в токен, и сравнить его с именем хоста запроса, чтобы иметь дополнительный уровень безопасности для атаки перехватчика ssl. Да, это не полная защита, но все же немного лучше, так как злоумышленник должен изменить свое имя хоста в дополнение к отправке токена с другого устройства.

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

+0

Как именно вы можете отклонить токен JWT, когда пользователь изменил свой пароль (или любое другое поле, используемое для генерации JWT)? Проверка JWT выполняется только из данных в JWT, и поскольку JWT не истек, его подпись будет действительна, даже если был изменен пароль пользователя в вашей базе данных. –

+0

@ LaurynasMališauskas, когда вы получаете токен от клиента, который имеет хешированный пароль в нем при отправке, просто проверьте, что хеш с хэшем пароля в вашей базе данных, если они не совпадают, возвращает ошибку клиенту. –

+0

Это не совсем так, как JWT, поскольку он должен быть самозаверяющим токеном. Однако я сделал некоторые исследования, и кажется, что многие люди используют его так же, как будут использоваться непрозрачные жетоны. –