Автономная аутентификация веб-службы wcf - PullRequest
1 голос
/ 24 января 2012

Есть ли проблема с автономной веб-службой WCF для аутентификации, которая принимает имя пользователя и пароль?Должен ли я использовать https или другие рекомендации?

Также, если я хочу сбросить пароль пользователя с помощью веб-службы WCF, как я могу предотвратить любую атаку методом подбора?или вокруг этого подхода также есть лучшая практика?Я бы просто отправил письмо / имя пользователя для сброса пароля.

Ответы [ 2 ]

2 голосов
/ 24 января 2012

Да, вы должны использовать https.Поскольку аутентификация по протоколу http в равной степени подвержена атакам как неаутентифицированная служба, любой может прослушать простой текст, передаваемый по проводам.В WCF есть хороший способ реализовать аутентификацию, используя класс UserNamePasswordValidator. Вы можете создать какой-нибудь текстовый файл на сервере, чтобы иметь имя пользователя и пароль, которые можно изменить, отправив электронное письмо и т. Д.

public class MyCustomValidator:  System.IdentityModel.Selectors.UserNamePasswordValidator
{
     public override void Validate(string userName, string password)
    {
        if (null == userName || null == password)
        {
            throw new ArgumentNullException();
        }

        else
        {
            bool isValid = UserRepository.ValidateUser(userName,password); //any db based checking

            if(!isValid )
            {
                 throw new SecurityTokenException("Unknown Username or Password");
            }
        }
    }
}

config:

<system.serviceModel>
      <bindings>
        <wsHttpBinding>
          <binding name="CustomAuthentication">
            <security mode="Message">
              <message clientCredentialType="UserName" />
            </security>
          </binding>
        </wsHttpBinding>
      </bindings>

      <behaviors>
        <serviceBehaviors>
          <behavior name="CustomValidator">
            <serviceCredentials>
              <userNameAuthentication  userNamePasswordValidationMode="Custom"
                 customUserNamePasswordValidatorType="MyAssembly.MyCustomValidator, MyAssembly"/>
            </serviceCredentials>
          </behavior>
        </serviceBehaviors>
      </behaviors>      

      <services>
        <service name="MyService" behaviorConfiguration="CustomValidator">
          <endpoint address="" binding="wsHttpBinding" contract="IMyService" bindingConfiguration="CustomAuthentication" />
       </service>
     </services>
</system.serviceModel>

Если вы хотите использовать аутентификацию без https, вы можете попробовать это: Аутентификация WCF с использованием basicHttpBinding и пользовательского UserNamePasswordValidator

1 голос
/ 25 января 2012

Это разумный подход, если вы хотите экспортировать аутентификацию ваших служб, например, для поддержки федерации удостоверений с другим поставщиком удостоверений, таким как службы федерации Active Directory или даже Facebook или Google, используя службу контроля доступа Windows Azure.

Дополнительным преимуществом этого является то, что в будущем будет относительно легко поддерживать альтернативные схемы аутентификации, такие как сертификаты X.509.

Это может показаться слишком сложным для ваших нужд, но вам определенно следует рассмотреть возможность внедрения службы аутентификации с использованием стандартного протокола, такого как WS-Trust. В этом случае вашим сервисом будет служба маркеров безопасности (STS) для использования жаргона. Это довольно хорошо поддерживается с помощью Windows Identity Foundation (WIF), и фактически инструменты WIF для Visual Studio включают в себя образец STS, чтобы вы могли работать.

В качестве альтернативы, есть превосходный готовый STS с открытым исходным кодом, созданный Домиником Байером, который вы можете загрузить, настроить при необходимости (например, использовать свое собственное хранилище имени пользователя / пароля). Вы можете скачать это здесь

http://identityserver.codeplex.com/

Как я уже сказал, это, возможно, более сложно, чем вам нужно, но может стать действительно хорошим вложением в будущее.

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