Правильный способ безопасно хранить токен/секрет/etc из OAuth?

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

Теперь мне интересно, какой рекомендуемый безопасный способ хранения ответов в моей локальной базе данных и сеансе?

  • Что я должен хранить?
  • Где его хранить?

В этом примере приложение twitter-oauth-with-rails хранит a user.id в сеансе, а таблица пользователя имеет token и secret. Но похоже, что было бы очень легко взломать и получить секрет, просто пройдя множество тестовых идентификаторов пользователей, нет?

Ответы

Ответ 1

Токены бесполезны без ключа/секрета для вашего приложения Twitter, поскольку они не одинаковы для каждого приложения, но зависят от ключа/секретности клиента.

Чтобы получить переменную сеанса, вам придется угадать идентификатор сеанса, который не так легко выполнить.

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

Обновление: я не уверен, правильно ли понимаю, что вы подразумеваете, обратившись к токенам из базы данных, угадывая идентификатор.

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

Ответ 2

Если вы разрабатываете веб-приложение, вы можете добавить поле hidden в форму, которую представляет пользователь, с некоторым значением хэш-значения, вычисленным с помощью user.id, поэтому злые парни не могут изменить это значение и просто "угадать", для токена доступа