Однозначно определить, что запрос приходит от конкретной установки моего расширения - PullRequest
0 голосов
/ 17 марта 2012

Я разрабатываю расширение Chrome, которое должно взаимодействовать с моим сервером. Я использую oauth на сервере Google для аутентификации. Когда пользователь впервые устанавливает расширение, ему необходимо войти в систему с помощью Google, а после того, как сервер oauth перешел на сервер, мой сервер отправляет пользователю unqiueid, который мое расширение хранит в локальном хранилище. Каждый последующий запрос к моему серверу - это пост-запрос, в котором uuid является частью полезной нагрузки для аутентификации пользователя. Теперь проблема с этим сценарием заключается в том, что я не уверен, насколько безопасна эта техника, так как я верю, что любой может взять чужой uuid и сохранить его в своем локальном хранилище, таким образом имея возможность получить доступ к учетной записи других людей. Я знаю, что мог бы использовать ssl для запроса между моим сервером и клиентом, чтобы предотвратить подслушивание запроса / ответа от моего сервера, но даже если бы у меня был личный доступ к чужому компьютеру, я мог бы легко скопировать uuid. Я хочу знать, есть ли лучший способ аутентификации для расширений, не запрашивая у пользователя вход в систему с помощью oauth каждый раз, когда он собирается использовать мое расширение.

1 Ответ

1 голос
/ 17 марта 2012

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

Но на время делегированного входа в систему вы могли бы сделать свой UUID более безопасным, «вставив» в него некоторую дополнительную «уникальную» информацию о клиенте, такую ​​как его IP-адрес и файл cookie сеанса. Таким образом, в основном объединяем набор уникально идентифицирующих фрагментов информации, а затем подписываем их открытым ключом перед сохранением на стороне клиента. Нечто подобное тоже:

token = encrypt: UUID + client IP + sessionID

А на стороне сервера вы бы сделали:

raw = decrypt: token
UUID = uuidPart: raw
assignedIP = ipPart: raw
assignedSessionID = idPart: raw
verifyMatch: assignedIP, currentIP
verifyMatch: assignedSessionID, currentSessionID

Чтобы успешно маскироваться под другого пользователя, атакуемый должен иметь как токен, так и тот же IP-адрес, что и у исходного клиента, что на пару шагов более безопасно, чем ваша предыдущая установка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...