Для простой 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.