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