Какой тип веб-службы я должен собрать? - PullRequest
0 голосов
/ 20 апреля 2010

Я хочу написать веб-сервис с использованием Visual Studio. Служба должна поддерживать некоторый тип аутентификации и должна иметь возможность получать команды через простые запросы HTTP GET. Ввод будет только вызов метода с некоторыми параметрами, а ответы будут простые коды состояния / ошибки. Мой инстинкт был бы заключаться в использовании веб-службы ASP.NET, но это не вариант в C # 4.0, и это заставляет меня задуматься, стоит ли мне использовать что-то более современное. Я посмотрел в WCF, но кажется, что для этого требуется запущенное приложение на стороне клиента - есть ли способ запросить хост WCF, просто получив доступ к URL?

Аутентификация также является важной частью. Разработка моей собственной маленькой системы аутентификации кажется плохой идеей - я читал, что это слишком легко испортить. Каков будет стандартный способ аутентификации с помощью веб-службы, подобной этой?

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

1 Ответ

1 голос
/ 20 апреля 2010

Для простого HTTP-сервиса, который принимает команды через GET (вы должны рассмотреть возможность использования POST ...), я бы использовал прямой ASP MVC, а не настоящий 'веб-сервис'. WCF хочет направить вас по пути SOAP, и ваши клиенты будут проклинать вас вечно. RESTful WCF также является альтернативой, но это все равно кажется излишним imho.

Что касается аутентификации, у вас есть две жизнеспособные схемы аутентификации:

  • Встроенная защита Windows, которая будет работать только в том случае, если клиент находится внутри внутренней сети или подключен с помощью решения VPN или DirectAccess
  • Дайджест HTTP, который плохо поддерживается режимами аутентификации ASP (поддерживается только аутентификация на базе пользователей леса Active Directory).

При аутентификации Windows вы ничего не делаете с кодом на стороне сервера, просто отметьте web.config <authentication mode="Windows" />. Проверка подлинности «Windows» понимается большинством пользовательских агентов. Также достаточно просто запрограммировать клиенты вашей службы на использование аутентификации Windows, просто установите Credentials запроса для текущего пользователя DefaultCredentials .

При дайджест-аутентификации сервер будет запрашивать аутентификацию у пользовательского агента, но, к сожалению, проверка ASP, как я уже сказал, работает только для проверки доверенного домена NT. Однако клиенту не обязательно находиться во внутренней сети (нет обмена NTSP SSPI между клиентом и сервером). Программирование клиента очень просто, в .Net просто установите реквизиты реквизитов на правильно инициализированный CredentialsCache :

CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri("http://www.contoso.com/"),"Digest", new NetworkCredential(UserName,SecurelyStoredPassword,Domain));
...

request.PreAuthenticate = true;
request.Credentials = myCache;

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

Теоретически у вас также может быть третий путь аутентификации: полнодуплексный SSL. Но «тривиальная» проблема развертывания клиентских сертификатов делает эту альтернативу тупиком для тех, кому не хватает полностью предустановленной корпоративной PKI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...