Сначала я неверно истолковал реализацию OAuth с меткой времени, полагая, что это означает, что метка времени, которая не была получена в течение 30 секунд после текущего времени, будет отклонена. Оказалось, что это неправильно по нескольким причинам, включая тот факт, что мы могли не гарантирует, что все системные часы были синхронизированы достаточно вплоть до минут и секунд независимо от часового пояса. Затем я читаю это снова, чтобы получить больше ясности:
"Если иное не указано поставщиком услуг, отметка времени
выражается в количестве секунд с 1 января 1970 года 00:00:00 по Гринвичу.
Значение метки времени ДОЛЖНО быть положительным целым числом и ДОЛЖНО быть равным или
больше, чем отметка времени, использованная в предыдущих запросах . "
источник: http://oauth.net/core/1.0/#nonce
Значение временных меток сравнивается только по отношению к предыдущим запросам из того же источника, а не по сравнению с системными часами моего сервера.
Тогда я читаю более подробное описание здесь: http://hueniverse.com/2008/10/beginners-guide-to-oauth-part-iii-security-architecture/
( TL; DR? - переходите к жирным частям ниже)
Для предотвращения повторного использования скомпрометированных запросов (воспроизведения),
OAuth использует одноразовый номер и метку времени. Термин одноразовый номер означает ‘используемое число
Once ’и является уникальной и обычно случайной строкой, которая предназначена для
уникально идентифицировать каждый подписанный запрос. Имея уникальный идентификатор
для каждого запроса поставщик услуг может предотвращать запросы
от использования более одного раза. Это означает, что Потребитель генерирует
уникальная строка для каждого запроса, отправленного поставщику услуг, и
Поставщик услуг отслеживает все одноразовые номера, используемые для их предотвращения
от использования во второй раз. Так как значение nonce включено в
подпись, она не может быть изменена злоумышленником, не зная
общий секрет.
Использование одноразовых номеров может быть очень дорогостоящим для поставщиков услуг, поскольку они требуют
постоянное хранение всех полученных одноразовых значений. Делать
реализация проще, OAuth добавляет значение метки времени к каждому запросу
что позволяет поставщику услуг сохранять только одноразовые значения для
ограниченное время. Когда приходит запрос с более старой отметкой времени
чем оставленный период времени, он отклоняется как поставщик услуг
больше нет одноразовых номеров с этого периода времени. Можно с уверенностью предположить, что
запрос, отправленный после разрешенного срока, является атакой воспроизведения. OAuth
обеспечивает общий механизм для реализации временных отметок, но оставляет
фактическая реализация до каждого поставщика услуг (область много
полагаю, следует вернуться к спецификации). Из безопасности
точка зрения, реальный одноразовый номер является комбинацией значения метки времени
и одноразовая строка. Только вместе они обеспечивают вечную уникальную ценность
это никогда не может быть использовано злоумышленником.
Причина, по которой я запутался, заключается в том, что если одноразовый номер используется только один раз, почему поставщик услуг может отклонить его на основании отметки времени? «Поставщик услуг больше не имеет одноразовых номеров с этого периода времени», меня смущает и звучит так, как будто одноразовый номер можно использовать повторно, если он находится в пределах 30 секунд с в последний раз, когда он использовался.
Так может кто-нибудь прояснить это для меня? Какой смысл использовать метку времени, если одноразовый номер используется один раз, и я не сравниваю метку времени с моими собственными системными часами (потому что это, очевидно, не будет надежным). Имеет смысл, что временные метки будут только относительно друг друга, но с уникальным требованием одноразового номера это кажется неуместным.