WCF, веб-службы RESTful и пользовательская аутентификация

Я начинаю считать, что я очень некомпетентный программист. После многого чтения я все еще не могу понять, как правильно реализовать механизм аутентификации для службы RESTful WCF.

Я пробовал все:

Существует ли разумный способ реализации механизма аутентификации для службы RESTful WCF?

Ответы

Ответ 1

Когда я изучал, как реализовать безопасность для моего собственного сервиса WCF RESTful, я потратил некоторое время на то, как другие популярные сервисы, такие как flickr и amazon, реализуют свою собственную безопасность, полагая, что они, вероятно, потратили гораздо больше времени на размышления об этом У меня есть. Flikr в частности помогли сформировать, как я сформировал свои подписи и запросы.

В конце я выбрал схему аутентификации HMAC (Hash-based Message Authentication Code) для моих служб.

Я создал пользовательский HAMS-агент ServiceAuthorizationManager, который проверяет подпись каждого запроса, когда он приходит. Каждый запрос содержит следующее:

  • токен пользователя
  • Отметка времени
  • nonce
  • подпись

Используя эту информацию, менеджер может искать секрет пользователя из своего токена и может воссоздать подпись на сервере, используя предоставленную информацию.

Моя подпись состоит из хэша MD5 из следующих (значения объединяются вместе в определенном порядке и хэшируются, поэтому значение может повторяться на сервере):

  • apikey
  • userToken
  • секрет
  • Отметка времени
  • нонс

Я сохраняю nonce в экземпляре memcache в течение короткого периода времени, чтобы быстро проверять любые атаки повтора. После этого перекоса времени (около 10 минут) временная метка используется для отклонения любых других старых запросов.

Я могу опубликовать некоторые фрагменты кода, если это поможет. В общем, я обнаружил, что аутентификация HMAC, как правило, является самым безопасным способом и легко поддерживается на любых клиентах, которые будут использовать ваш сервис (а не только .NET).