Базовая аутентификация с сервисом WCF REST для чего-то кроме учетных записей Windows?

Есть ли чистый способ предоставления службы WCF REST, которая требует базовой аутентификации, но где мы сами обрабатываем фактическую проверку имени пользователя / пароля? Кажется, что когда вы указываете WCF в конфигурации, что хотите использовать базовую аутентификацию, он заставляет вас включить базовую аутентификацию в IIS, и IIS может выполнять базовую аутентификацию только для учетных записей окон.

Единственный найденный нами взлом - это обмануть WCF и сказать, что в службе нет защиты, а затем выполнить аутентификацию за пределами стека WCF с использованием универсального модуля IHttpModule (который имеет собственный файл конфигурации, чтобы указать, какие URL имеют аутентификацию / авторизацию). требования).

Кажется, должен быть лучший путь. У кого-нибудь есть?

5 ответов

Решение

Библиотека Contrib WCF REST включает эту функцию:

http://github.com/mikeobrien/WcfRestContrib

Это также позволяет вам защищать отдельные операции.

См. Пользовательская базовая аутентификация для служб RESTful. Подход Pablo использует функциональность перехватчика, которая предоставляется через стартовый набор REST для решения проблемы. Если вы не хотите зависеть от стартового комплекта REST, то вы можете создать свой собственный хост-сервис и использовать предоставленную функциональность inteceptor.

Имя пользователя и пароль установлены на клиенте, например:

cc.ClientCredentials.UserName.UserName = ReturnUsername();
cc.ClientCredentials.UserName.Password = ReturnPassword();

Или они встроены в тело сообщения REST?

Если первое, вы можете использовать пользовательский UserNamePasswordValidator: http://msdn.microsoft.com/en-us/library/aa702565.aspx

Если последнее, вы можете установить службу без защиты и использовать пользовательский ServiceAuthorizationManager для проверки содержимого сообщения: http://msdn.microsoft.com/en-us/library/ms731774.aspx

Надеюсь, что один или другой помогает! Я бы попытался опубликовать пример кода и конфигурации, но я @ home и не имею доступа к коду, который все @ работа.

Если вы размещаете его в IIS, лучше использовать специальный модуль http. Вы можете перенести принципала на сторону WCF для обеспечения безопасности доступа к коду. См. HTTP Basic Authentication против учетных записей не-Windows в IIS/ASP.NET (часть 3 - Добавление поддержки WCF). Также см. Пользовательскую базовую проверку подлинности HTTP для веб-служб ASP.NET в.NET 3.5 / VS 2008.

Если вы не используете IIS, вы должны иметь возможность реализовать userNameAuthentication. Смотри наконец! Имена пользователей по транспортной аутентификации в WCF.

Да, безусловно, есть способ. Вам нужно настроить кастом userNamePasswordValidationMode значение для вашей службы и укажите его класс с переопределенным методом, который может проверять и проверять предоставленные учетные данные. При выполнении вызова RESTful эти учетные данные при использовании обычной проверки подлинности в надлежащей форме должны быть в заголовке запроса. С помощью этого пользовательского метода вы можете проверить учетные данные и затем аутентифицировать клиента к вашему сервису. Нет учетной записи Windows или домена даже не требуется.

Приятно то, что вы можете перенести этот контекст безопасности на следующий уровень и обеспечить детальную аутентификацию на уровне метода. У вас могут быть случаи, когда большой пул клиентов может получить доступ к службе, но не все методы внутри (то есть платные клиенты или неоплаченные). В этом случае вы также можете при необходимости предоставить авторизацию на уровне метода.

Ниже приведено пошаговое решение (со слишком большим количеством шагов для встраивания), которое содержит как необходимую конфигурацию, так и безопасность, необходимые для получения полного решения. Проблема часто заключается в том, что обычная аутентификация используется без защиты транспорта с помощью SSL-сертификата, и это плохо. Обязательно выполните все шаги, и вы внедрите обычную аутентификацию без необходимости использования каких-либо учетных записей Windows или конфигурации в службе WCF RESTful.

Службы RESTful: аутентификация клиентов с использованием базовой аутентификации

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