Ответы пользователя по тегу Идентификация пользователей
  • Имеет ли смысл хранить refresh-токены?

    Это слишком общий вопрос.

    В целом, хранить сами токены не стоит ни в каком случае, для сравнения всегда достаточно хранить хеш.

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

    Про запрет повторного использования вам ответили, но в целом такой запрет является опциональным, в большинстве реализаций OAuth2 новый рефреш не возвращается и старый токен остается действительным.

    В случае если вы не используете JWS, а генерируете случайные токены, вам в любом случае надо их хранить (точнее их хеши), т.к. вы будете сравнивать переданный токен с хранимым.
    Ответ написан
    9 комментариев
  • Не могу понять в какой момент создается refreshToken а когда acces?

    В "классическом" варианте, access token это короткоживущий токен для доступа к конечному ресурсу, refresh token это долгоживущий токен, который служит для получения access token'а, он отправляется не на конечный ресурс, а на сервер OAuth. Если вам надо сделать разовое действие, то refresh не требуется, при авторизации вы сразу получаете access token и refresh token и можете не хранить refresh. Если вам надо делать регулярные действия (например проверять не пришли ли новые письма или не появились ли новые события календаря), то access token через некоторое время протухает, и чтобы получить новый надо его обновить, получив от OAuth сервера новый access с помощью refresh token'а
    Ответ написан
    3 комментария
  • В чем опасность "клиентской" oAuth авторизации?

    Второй вариант достаточно безопасен при правильной реализации, однако там есть много подводных камней. Достаточно подробно они и возможные атаки на клиентский OAuth разобраны в этой статье.

    Хэш используется для предотвращения утечек токена наружу, например через Referer страницы.
    Ответ написан
    Комментировать
  • Как сделать авторизацию пользователя на сайте после закрытия браузера?

    Используйте TLS (https) и куки с флагом HTTP Only и Secure. В качестве куки лучше использовать достаточно длинный случайный идентфикатор сеанса.

    Такую куку нельзя украсть через XSS, можно украсть только получив доступ к браузеру пользователя. Но в случае, если атакующий получил доступ к браузеру, вы уже никак не поможете пользователю. Атакующий будет иметь доступ ко всем, к чему имеет доступ пользователь.

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

    Писать куда-либо хэш пароля не следует, это ничего не дает в плане защиты, но позвоялет сбрутить пароль, если каким-то образом похищена кука (например через баг на поддомене).
    Ответ написан
  • Openid.mail.ru прибили?

    openid 1.0/2.0 как стандарты авторизации мертвы с 2013го года. openid.mail.ru постепенно идет к EOL, в настоящее время поддерживается авторизации только для нескольких достаточно крупных доменов.

    Для аутентификации сайтам необходимо переходить на Oauth 2.0
    https://o2.mail.ru/
    Ответ написан
    Комментировать
  • Best practices: регистрация на основе номера телефона в мобильной разработке (как)?

    Чаще всего делается схема refresh token + access token, т.к. она является легко масштабируемой.
    1. Пользователь авторизуется на сервере авторизации по телефону, приложение получает refresh token (постоянно действующий), постоянно хранит этот токен безопасным способом.
    2. При старте приложения и с некоторой регулярностью (например раз в 10 минут) или при необходимости обращения к определенному API фронт-сервера, приложением дергается API сервера авторизации с refresh token и получается access token, короткоживущий (например 15 минут). access token может быть некоторой информацией - id пользователя, timestamp, запрошенный тип сервиса и т.п. - подписанной (или зашифрованной) ключом сервера авторизации.
    3. Приложение обращается к API front-серверов с access token, фронт-сервер валидирует токен
    4. При разлогине (или смене пароля если он будет) инвалидируется refresh token. access token'ы "протухают" самоходом в течении интервала жизни.

    Это дает:
    1. совместимость с OAuth, можно использовать вход через сторонние сервисы и наоборот предоставлять им возможность что-то делать за пользователя.
    2. централизованную авторизацию пользователя и управление сессиями (все токены раздаются сервером авторизации)
    3. возможность завершения сессии на стороне сервера (сервер авторизации инвалидирует refresh token)
    4. возможность централизовано давать или не давать доступ к отдельным концам API или серверам (через включения типа сервиса в сессионный токен, для каждого API или сервиса можно запрашивать разные токены, которые будут действительны только для них). Так же можно разделить зоны безопасности, например запрашивать отдельный токен для обращения к менее защищенным сервисам, который не даст доступа к более привилегированным сервисам.
    5. фронт-серверам не требуется проверять каждый запрос на сервере авторизации, они самостоятельно могут проверить правильность таймстампа/подписи и соответсвтие типа токена запросу.

    Использование JWT или других механизмов уже определяется структурой приложения. Лучше использовать стандартный механизм, чтобы избежать "самопальной" криптографии.

    P.S.
    иногда схема усложняется до refresh_token (постоянный) + session_token (временный) + access_token (на доступ к кокретной ручке или сервису)
    Ответ написан
    Комментировать
  • Что именно хранится в куках аутентификации?

    Куки используются для организации сеанса, а не для аутентификации как таковой, т.е. куки позволяют сопоставить запрос и сеанс, для которого уже пройдена аутентификация, поэтому токены, используемые в авторизации (например OAuth) в куках не хранятся.

    Другой вопрос, как именно сопоставляются данные о сеансе и куки, тут может быть несколько подходов:
    1. Данные о сеансе хранятся на стороне сервера, куки используется как ключ, по которому они достаются, например из базы.
    2. Данные о сеансе хранятся в самой куки, зашифрованные ключом сервера, это позволяет избежать хранения данных на стороне сервера.
    Ответ написан
  • Как вернуть в windows 10 контекстное меню для вставки данных в форме ввода учетных данных?

    RDP не дает доступа к буферу обмена до входа пользователя из соображений безопасности. Держать пароль в открытом виде и копировать его через буфер обмена это несколько странно, даже для бухгалтерии.
    Вы можете сделать автоматический вход, без необходимости пользователя указывать пароль. Запустите подключение к удаленному рабочему столу, откройте параметры, на вкладке "Общие" укажите имя пользователя, нажмите "изменить", введите пароль, выберите "Сохранить как" и сохраните файл соединения, в дальнейшем запускайте соединение через этот файл. Вход будет производиться автоматически.
    Ответ написан
    1 комментарий