RESTful аутентификация службы данных WCF - PullRequest
4 голосов
/ 15 июня 2010

Я хотел бы внедрить API REST для существующего веб-сайта ASP.NET MVC.Мне удалось настроить службы данных WCF, чтобы я мог просматривать свои данные, но теперь вопрос заключается в том, как обрабатывать проверку подлинности.

В данный момент служба данных защищена с помощью встроенной проверки подлинности сайтов иэто нормально при доступе к сервису из форм AJAX.Тем не менее, это не идеально для RESTful API.

В качестве альтернативы проверке подлинности на основе форм я бы хотел, чтобы пользователи просто вставляли имя пользователя и пароль в URL-адрес веб-службы или в качестве параметров запроса.

Например, еслимой веб-сервис обычно доступен как

http://localhost:1234/api.svc

. Я бы хотел получить к нему доступ с помощью URL

http://localhost:1234/api.svc/{login}/{password}

Итак, мои вопросы следующие:

  • Это вменяемый подход?

  • Если да, как я могу это реализовать?

Кажется тривиальным перенаправление запросов GET, так что логин и пароль присоединяются в качестве параметров GET,Я также знаю, как проверять http-контекст и использовать эти параметры для фильтрации результатов.Но я не уверен, что / как можно применить тот же подход к запросам POST, PUT и DELETE.Могу ли я использовать параметры GET в запросах POST, PUT и DELETE?

Редактировать: Вопрос для меня, как встроить логин и пароль в URL веб-службы, чтобы я мог выполнять POST, PUTи УДАЛИТЬ запросы к веб-сервису.Я знаю, как реализовать аутентификацию, когда веб-сервис запущен и логин / пароль содержатся где-то в HTTPContext.Кроме того, я не ищу способы реализации форм или базовой аутентификации.Я знаю, как это сделать, но это не то, что я ищу.

Ответы [ 4 ]

0 голосов
/ 20 июля 2010

В итоге я использовал тройной подход, любой из этих методов аутентификации отлично работает на моей службе данных:

  • Базовая аутентификация с ключом API в качестве пароля
  • Аутентификация с помощью API-ключа, встроенного в заголовок запроса
  • Аутентификация на основе URL с ключом API в качестве пути к API. Я реализовал это с прокси-контроллером ASP.NET MVC.
0 голосов
/ 15 июня 2010

OData - Лучшие практики служб данных WCF от TechEd - Meta-Me - Сайт - Блоги MSDN

<system.web.extensions>
  <scripting>
    <webServices>
       <authenticationService enabled="true" />
    </webServices>
  </scripting>
</system.web.extensions>

Как насчет этого?

0 голосов
/ 20 июля 2010

Посмотрите, помогут ли вам ответы ниже:

ваш первый вопрос:

  • Это нормальный подход?

    Если ваша служба работает по протоколу https, я не вижу никаких проблем с использованием этого метода.

  • Если даКак я могу это реализовать?

Вы можете использовать параметры GET в других ваших методах, например.Здесь поток передается в теле.

[OperationContract]
        [WebInvoke(Method="POST", UriTemplate = "UploadFile/{fileName}/{userToken}")]
        string UploadFile(string fileName,string userToken,Stream fileContents);
0 голосов
/ 15 июня 2010

Мне не приходилось использовать restful через аутентификацию, но я должен убедиться, что группы пользователей имеют права доступа к сервису rest. Это я делаю через токен MD5, который передается веб-службе (это обычная служба JSON, а не оболочка WCF). По сути, я «знаю», каким веб-сайтам разрешен доступ к моему сервису, поэтому я даю им свой собственный ключ API (для простоты это MD5 доменного имени. Это проверяется входящим фильтром по URL-адресу и если MD5 это соответствует, тогда идет.

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

Мне было бы интересно посмотреть, как это делают другие, но для других проектов мне может понадобиться менее детальный подход к аутентификации.

...