Перехватить вызов метода WCF и "перенаправить" на основе статуса аутентификации
Было любопытно, если бы был способ проверить, прошел ли пользователь проверку подлинности, прежде чем делать вызов метода, а затем возвращать пользовательский объект и не завершать вызов, если это не так. Например:
Мы устанавливаем принципала пользователя в Application_PostAuthenticateRequest в global.asax для пользователя, выполняющего запрос, если они аутентифицированы, или для анонимного пользователя, если это не так. В настоящее время во всех методах, требующих аутентификации, мы имеем нечто похожее на следующий код:
public Result GetSomeObject()
{
if (HttpContext.Current.Request.IsAuthenticated)
{
}
}
Итог: мы хотим иметь возможность проверить IsAuthenticated ДО того, как мы позволим WCF войти в метод методов, требующих аутентификации, и, если true, продолжим, если нет, вернем объект Result (JSON) с ошибкой аутентификации.
3 ответа
То, что вам нужно разработать, называется ServiceAuthorizationManager в WCF. Вы можете найти больше информации об этом на:
Эта статья может стать отправной точкой для того, что вы ищете: http://pieterderycke.wordpress.com/2010/12/04/extending-wcf-creating-a-logging-component/
Вы можете написать собственный httpmodule для перехвата запросов на сервисный уровень и выполнения там аутентификации.