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