Как аутентифицировать пользователя при вызове службы WCF с использованием AJAX? - PullRequest
4 голосов
/ 18 августа 2010

У меня есть служба WCF, которую нужно вызывать со стороны клиента (вызов ajax).Я хочу использовать ScriptManager на странице ASPX, чтобы добавить ServiceReference к службе WCF (или) к JJuery-вызову ajax к службе WCF.Я хочу запретить анонимным пользователям доступ к службе WCF.Есть ли способ выполнить аутентификацию пользователя перед вызовом метода сервиса из JavaScript?как защитить мои вызовы службы WCF со стороны клиента?

Ответы [ 3 ]

5 голосов
/ 23 августа 2010

Существует несколько способов защиты служб WCF. Вероятно, самый простой способ, если ваши службы уже являются частью существующего общего приложения ASP.NET, - это включить режим совместимости ASP.NET для ваших служб. Если ваше приложение ASP.NET использует проверку подлинности для проверки пользователей (например, проверку подлинности с помощью форм), и вы включаете ее с помощью файла cookie сеанса, то режим совместимости ASP.NET выполняет большую часть этой работы за вас.

По умолчанию это отключено, но вы можете включить его, добавив в свой web.config:

<system.serviceModel>
        ...
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
        ...
</system.serviceModel>

Это включит режим совместимости для всех ваших сервисов в вашем приложении. Вы также можете включить это для отдельных сервисов, установив значение web.config, а также используя атрибут AspNetCompatibilityRequirements для класса обслуживания, а не для интерфейса):

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class FooService: IFooService {
}

Когда вы включите этот параметр, у вас будет доступ к HttpContext.Current (например, к странице ASP.NET), и он также обеспечит проверку подлинности пользователя перед доступом к файлу .svc (так же, как вы должны проходить проверку подлинности перед доступ к любому файлу .aspx). Если вы попытаетесь получить доступ к файлу .svc без проверки подлинности и используете проверку подлинности с помощью форм, вызывающий будет перенаправлен на страницу входа по умолчанию и после успешной проверки подлинности будет перенаправлен в файл .svc.

Это предложение делает несколько предположений:

  • ваши сервисы находятся в приложении ASP.NET;
  • вы используете какой-либо тип проверки подлинности ASP.NET (например, проверку подлинности с помощью форм) для проверки учетных данных пользователей и сохранения билета проверки в файле cookie;

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

Вот хорошая вступительная статья библиотеки MSDN о режиме совместимости с ASP.NET.

Если это сработает, возможно, следующий шаг - изучить что-то вроде аутентификации HMAC (которая включает в себя немного больше работы и согласование секретных ключей - но это определенно более безопасно, IMHO). Вот хороший пример его реализации - http://blogs.microsoft.co.il/blogs/itai/archive/2009/02/22/how-to-implement-hmac-authentication-on-a-restful-wcf-service.aspx

Надеюсь, это поможет. Удачи !!

2 голосов
/ 27 августа 2010

Я не уверен, поможет ли это, но я поместил слой между моим WCF и веб-приложением. Я бы сделал AJAX-запрос на ссылку на локальный asmx. Это оказалось под защитой бланка проверки подлинности. Затем asmx будет выполнять любые дальнейшие проверки безопасности (если этому конкретному пользователю, выполняющему вызов, будет разрешено запрашивать эти данные или формировать данные на основе пользователя), а затем перенаправлять вызов моей службе WCF.

Таким образом, моему сервисному уровню не нужно было знать о пользователях для каждого приложения, обращающегося к нему, и он заботился только о доставке запрошенных данных.

Веб-служба asmx взяла на себя ответственность за безопасность.

Затем я создал WCF, размещенный в IIS, с использованием WAS и разрешил доступ Windows Auth только для идентификатора, под которым выполнялся пул приложений веб-приложения.

Итак:

ASPX -> ASMX WebService -> WCF

Я думаю, что это даст вам контроль / разделение и безопасность, о которой вы просите?

0 голосов
/ 25 августа 2010

для веб-службы WCF http. Единственный способ защитить конечную точку Web - это предоставить ее через HTTPS с использованием безопасности транспорта.При использовании защиты на основе сообщений информация о безопасности обычно помещается в заголовки SOAP, и поскольку сообщения, отправляемые на конечные точки, отличные от SOAP, не содержат конверт SOAP, некуда разместить информацию о безопасности, и вы должны полагаться на безопасность транспорта.

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