Пользовательская базовая проверка подлинности HTTP для веб-служб ASP.NET в .NET 3.5 / VS 2008 - PullRequest
10 голосов
/ 29 января 2009

Я выполняю рефакторинг рабочего веб-приложения ASP.NET для предоставления интерфейса веб-служб с помощью веб-службы ASP.NET. Согласно аутентификации веб-сервисов - лучшие практики , Basic Auth over https - путь. Давайте предположим, что это так, а не WS-Security, X509 и т. Д.

В .NET 3.5 / VS 2008, каков самый простой способ реализации пользовательской http Basic Authentication (не для Windows), например, принимать только в том случае, если имя пользователя - «foo», а пароль - «bar». В конечном счете, я хотел бы установить Thread.CurrentPrincipal.

Я пишу свой собственный HttpModule или это можно сделать проще?

Ответы [ 3 ]

5 голосов
/ 11 февраля 2009

Вероятно, с использованием Пользовательская базовая аутентификация для IIS , написанная Доминик Байер - это путь. Как он указывает Имена пользователей WCF 3.5 для обеспечения безопасности транспорта нельзя использовать в службе, размещенной на IIS, хотя мой вопрос касался веб-служб ASP.NET, а не WCF.

Существует еще одна реализация HTTP-модуля, которая называется Базовая аутентификация в ASP.NET по пользовательскому источнику данных Santosh Sahoo .

Хотя это не то, что я хотел, я обнаружил Пример SOAP-заголовков QuickStart Tutorial в качестве информативного обходного пути. Отправка пароля в виде обычного текста через http явно небезопасна, но этот пример можно расширить, чтобы повысить безопасность, например, при работе по протоколу https или при отправке хэша «пароль + одноразовый идентификатор GUID + метка времени».

3 голосов
/ 04 февраля 2009

Получите значение заголовка Authorization, проанализируйте его и подтвердите имя пользователя / пароль.

Значением является имя пользователя: пароль, закодированный в виде строки Base64.

Подробнее см. http://en.wikipedia.org/wiki/Basic_access_authentication.

Редактировать : если вы хотите, чтобы это делалось для каждого запроса, используя собственную схему аутентификации, тогда было бы проще написать HttpModule для обработки парсинга заголовка и установки принципала потока.

1 голос
/ 29 января 2009

Если вы рассматриваете WCF, вы можете использовать usernameOverTransport security для basicHttpBinding. то есть username и passowrd находятся в заголовке SOAP запроса, и весь трафик защищен SSL-шифрованием по проводам.

Пользовательский валидатор UserNamePasswordValidator может использоваться для аутентификации входящих учетных данных, например базы данных.

Вы можете установить участника потока в пользовательском IAuthorizationPolicy в поведении службы.

например. Оценить реализацию метода для IAuthorizationPolicy для установки текущего участника

public bool Evaluate(EvaluationContext evaluationContext, ref object state)
{
       Object obj;
       if( evaluationContext.Properties.TryGetValue( "Identities", out obj ))
       {
            // get the authenticated identity
            IIdentity client = (obj as IList<IIdentity>)[0];
            evaluationContext.Properties["Principal"] = ... // create principal obj here for the identity
            // this will set thread's current principal
       }
       return true;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...