Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Библиотека WCF REST Contrib позволяет использовать эту функцию:

http://github.com/mikeobrien/WcfRestContrib

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

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

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

RESTful Services: проверка подлинности клиентов с использованием базовой проверки подлинности