2010-04-19 5 views
0

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

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

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

ответ

1

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

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

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

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

С проверкой подлинности дайджеста сервер запросит аутентификацию агента пользователя, но, к сожалению, проверка ASP, как я уже сказал, работает только для проверки надежного домена NT. Клиент, однако, не обязательно должен находиться в интрасети (обмен клиентом NTLM между клиентом и сервером отсутствует). Программирование клиента является faily легко, в .NET просто установить requet учетные данные правильно инициализированы 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.

Смежные вопросы