Когда я изучал, как реализовать защиту для моей собственной службы WCF RESTful, я потратил некоторое время на изучение того, как другие популярные сервисы, такие как flickr и amazon, реализуют свою собственную безопасность - предполагая, что они, вероятно, потратили на это гораздо больше времени, чемЯ имею. документация Flickr , в частности, помогла сформировать то, как я формировал свои подписи и запросы.
В итоге я выбрал схему аутентификации HMAC (Hash-Message Authentication Code) для своих услуг.
Я создал пользовательский HMAC ServiceAuthorizationManager, который проверяет подпись каждого запроса по мере его поступления. Каждый запрос содержит следующее:
- маркер пользователя
- метка времени
- nonce
- подпись
Используя эту информацию, менеджер может найти секрет пользователя по его токену и воссоздать подпись на сервере, используя предоставленную информацию.
Моя подпись состоит из хэша MD5 следующего (значения объединяются в определенном порядке и хешируются, чтобы значение можно было повторить на сервере):
- apikey
- userToken
- secret
- timestamp
- nonce
Я храню nonce в экземпляре memcacheв течение короткого периода времени, чтобы быстро проверить против любых атак воспроизведения.По истечении этого времени (около 10 минут) отметка времени используется для отклонения любых других старых запросов.
Я могу опубликовать некоторые фрагменты своего кода, если это поможет.В общем, я обнаружил, что аутентификация HMAC, как правило, является наиболее безопасным способом и легко поддерживается на любых клиентах, которые будут использовать ваш сервис (не только на .NET).