Перехватить вызов метода 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/2011/04/07/implementing-restricted-access-to-a-wcf-service-with-the-serviceauthorizationmanager/

Эта статья может стать отправной точкой для того, что вы ищете: http://pieterderycke.wordpress.com/2010/12/04/extending-wcf-creating-a-logging-component/

Вы можете написать собственный httpmodule для перехвата запросов на сервисный уровень и выполнения там аутентификации.

Другие вопросы по тегам