Подтвердить что ты не робот

Секретное сохранение идентификаторов OpenID и токенов OAuth

Я создаю веб-приложение, которое будет использовать идентификаторы OpenID и токены OAuth с Youtube. В настоящее время я сохраняю идентификатор OpenID и маркер токена/токена OAuth в виде обычного текста в базе данных.

Неправильно ли хранить эти значения в виде обычного текста? Я мог бы использовать одностороннее шифрование для идентификатора OpenID, но я не знаю, если это необходимо. Для токенов OAuth мне нужно будет использовать двухстороннее шифрование, поскольку мое приложение полагается на получение токена сеанса для некоторых видов использования.

Нужно ли шифровать идентификатор OpenID? Может ли кто-нибудь использовать его для доступа к учетной записи пользователя?

4b9b3361

Ответ 1

Во-первых, есть зарегистрированное приложение с consumer_key и consumer_secret.

Когда пользователи аутентифицируются и "разрешают" ваше зарегистрированное приложение, вы возвращаетесь: a access_token, который считается пользователем "паролем" и позволит JUST YOUR приложению действовать от имени пользователя.

Таким образом, получение всего лишь пользователя access_token из вашей базы данных не поможет, если у них также нет consumer_key и consumer_secret для полного доступа.

Поставщик услуг сравнивает все 4 параметра по запросу. Было бы разумно зашифровать эти 4 параметра перед хранением и расшифровать их до ответа.

Это просто, когда вам нужно обновить или внести изменения в владельца ресурса пользователя от имени пользователя. Чтобы пользователь вошел в систему на вашем сайте, используйте сеансы.

Ответ 2

OAuth Token и Secret должны быть безопасными в вашей базе данных, но вы не можете хранить их, используя одностороннее шифрование, так же, как и для пароля. Причина в том, что вам нужен токен и секрет, чтобы подписать запрос.

Это также будет иметь место, если вы используете сервер OAuth, для проверки запроса по-прежнему нужен оригинальный токен/секрет.

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

Ответ 3

Здесь есть две школы мысли.

Первым аргументом является то, что вы должны обрабатывать токены OAuth, такие как пароли. Если кто-то должен получить доступ к вашей базе данных, получить все пары OpenID/OAuth и запустить атаку "человек в середине", они могут олицетворять любого пользователя на вашем сайте.

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

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

Между тем у Google есть этот совет:

"Токены должны рассматриваться как надежно, как любая другая конфиденциальная информация, хранящаяся на сервере".

источник: http://code.google.com/apis/accounts/docs/OAuth.html

И у какого-то случайного парня в Интернете есть специальный совет по внедрению:

  • Если theyre в файле обычного диска, защитите их, используя файловую систему разрешений, убедитесь, что theyre зашифрованы и скрыть пароль хорошо
  • Если theyre в базе данных, зашифруйте поля, сохраните ключ и обеспечить доступ к базы данных. *
  • Если theyre в LDAP, сделайте то же самое.

http://brail.org/wordpress/2009/05/01/implementing-oauth-take-care-with-those-keys/

Ответ 4

URL OpenID не должен быть зашифрован, потому что это ваш "открытый идентификатор" буквально, каждый должен знать значение. Кроме того, URL-адрес должен быть индексом в базе данных и всегда проблематично шифровать индекс в базе данных.

Токен/секрет OAuth должен быть секретным, и шифрование может улучшить безопасность, если вам нужно сохранить токен на длительный срок. В нашем потребительском приложении OAuth токен/секрет хранится в сеансе в течение короткого времени, и мы предпочитаем не шифровать их. Я думаю, что это достаточно безопасно. Если кто-то может заглянуть в нашу сессионную память, у них, вероятно, есть и наш ключ шифрования.

Ответ 5

Да, они должны быть симметрично зашифрованы (скажем, AES-256 в режиме CBC) в покое в базе данных. Простой способ шифрования этих токенов использует SecureDB Шифрование как API-интерфейс RESTful.

Раскрытие информации: я работаю в SecureDB.