Как Сервер OAuth, как я должен производить и хранить символы OAuth 2.0?

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

Это идет вразрез с моим лучшим суждением.

Символ - по существу другой пароль для пользователя. Хранение этих символов в простом тексте в базе данных - даже при том, что эти пароли произведены беспорядочно - походит на <�сильную> Плохую Идею . Это вызвано тем, что, если бы база данных поставилась под угрозу, то весь нападавший должен был бы сделать, пройти auth_token=code и исполняют роль любого пользователя, у которого есть действительный символ.

Каковы лучшие способы произвести и сохранить символ разрешения для OAuth 2?

3
nl ja de

1 ответы

как идея наличия непрозрачного символа, который является легко отзывным. Но я хотел бы держать O (1) время поиска.

Принимая ключевые поиски - O (1), я думаю, что следующая схема должна работать.

 Client Auth Code Issued = Url64(ENC(random_index||secretkey) || HMAC)
 Database Record         = {KEY: random_index , VALUE: scrypt(secretkey)}

Explanation:

Выпуск

  1. Generate 2 random strings, a random_index and secret_key
  2. Hash the secret_key using password hashing best-practices and store it under the random_index in the db.
  3. Encrypt the random_index and secret_key and supply it to the client as an auth_code

Проверка

  1. Расшифровывает клиента auth_code в random_index и secret_key компоненты
  2. Ищет символ random_index в базе данных
  3. Проверяет secret_key использование метода мешанины во время выпуска.

Я думаю, что вышеупомянутое решает проблему, но я приветствовал бы любые другие решения.

Note: I would store other meta-data along with the secret key (expiration, permissions, etc..) but this unimportant to answering the question.

Note 2: I may also get away with using SHA2 or another fast hashing algorithm instead of scrypt or bcrypt since I control the entropy in secret_key.

1
добавлено
Это выглядит выполнимым. Однако можно быть в состоянии избавиться от random_index и искать символы другими средствами (например, метаданные хранения, такие как client_id и user_id наряду с символом и использованием тех для поиска).
добавлено автор Chris H., источник
Кибербезопасность АСУ ТП: RUSCADASEC Community
Кибербезопасность АСУ ТП: RUSCADASEC Community
1 389 участник(ов)

Группа открытого независимого сообщества специалистов по кибербезопасности АСУ ТП / RUSCADASEC для интерактивного обмена информацией по теме Подробнее: www.ruscadasec.ru Наш канал для основных новостей и материалов @RUSCADASECnews

secinfosec
secinfosec
697 участник(ов)

Эта группа про информационную безопасность. Целевая аудитория: пентестеры, ресерчеры, ибшники всех мастей. Реклама, криминал, политика и прочая чушь карается родовыми проклятьями. Митапы: https://www.youtube.com/channel/UCagEjp1FmxY9gsVxi6_d4SQ

Linux Security
Linux Security
652 участник(ов)

Данная группа принципиально про безопасность и в частности про безопасность Linux. Прочие темы просим обсуждать в профильных чатах.

Chat Security / ИБач чат
Chat Security / ИБач чат
601 участник(ов)

Чат канала @ibach Обсуждение всего, что касается информационной безопасности Правила: https://t.me/chat_security/65