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

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

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

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

Ответы [ 5 ]

9 голосов
/ 20 июня 2009

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

http://github.com/mikeobrien/WcfRestContrib

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

4 голосов
/ 06 февраля 2010

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

4 голосов
/ 19 марта 2009

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

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 и не имею доступа к коду, который все @ work.

3 голосов
/ 19 марта 2009

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

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

1 голос
/ 02 июня 2012

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

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

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

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

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