Протокол OAuth маркер поколения поставщиком


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

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

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

Каждый знак должен быть:

  • непоследовательные
  • не угадываемые
  • уникальный (маркеры будут сохранены в базе данных, так что уникальность может быть проверена)

Это код, который я думаю использовать для генерации ключей:

public String generateToken() {
    SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
    MessageDigest digest = MessageDigest.getInstance("SHA-256");
    secureRandom.setSeed(secureRandom.generateSeed(128));
    return new String(digest.digest((secureRandom.nextLong() + "").getBytes()));
}

Я генерируя долго , используя в Java SecureRandom отобрать с SHA-1-ГПСЧ. Снова, используя 128-битное семян, порожденных SecureRandom отобрать.

Я тогда с помощью алгоритма SHA-256 хеш в результате долго получить 32 символов Unicode строку в качестве маркера.

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


14507
13
задан 4 марта 2011 в 12:03 Источник Поделиться
Комментарии