2010-07-23 2 views
1

Я работаю над проектом, в котором мы создаем веб-службу, вызываемую из настольного приложения. Моя проблема заключается в том, что я предоставляю безопасность веб-методу при вызове из настольного приложения, так что только аутентифицированный член может получить доступ к этому методу. Как передать имя пользователя и пароль через SOAP-заголовок.Безопасность веб-сервиса в asp.net

Но не все время, когда мы вызываем метод, я хочу аутентифицировать имя пользователя и пароль. I хочу, чтобы аутентифицировать пользователя только в первый раз, когда он вызвал веб-метод, и для следующего вызова токен будет генерировать которые мы будем использовать для будущих ссылок.

Пожалуйста, дайте мне решение для всех этих проблем немедленно. или другим способом внедрения защиты веб-сервиса. Пожалуйста, дайте решение с кодировкой.

ответ

0

Даже если вы передадите имя пользователя и пароль через заголовки мыла, любой, кто нюхает пакеты, сможет легко снять его. Даже если вы зашифруете данные, хакер может легко повторно использовать зашифрованные заголовки.

Я бы рассмотреть возможность сделать следующее: -

  1. Положите SSL certificate на веб-сервере (это ОЧЕНЬ cheap option now)
  2. Создать службу регистрации, которая принимает имя пользователя и пароль, а затем возвращает маркер как a guid
  3. Когда пользователь успешно проходит проверку подлинности, пропустите токен и loginId, запишите этот указатель маркера и идентификатор входа в базу данных на сервере. Каждый раз, когда пользователь входит обратно в том воссоздать новый маркер Guid
  4. Каждый раз, когда пользователь звонит другой вебсервис передать маркер и входу в системе и проверить по базе данных, чтобы убедиться, что пользователь все еще находится в

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

Поскольку вы используете SSL, соединение между сервером и клиентом безопасно. Все данные, которые передаются, включая данные GET и POST, зашифрованы

+0

Хороший ответ RE: маркер проходит часть вопроса. Я вообще не обратился к этому в своем ответе. Я действительно считаю, что защита сайта с помощью SSL не требует больших усилий. –

+0

Причина, по которой мне это нравится, заключается в том, что услуги не зависят от .net. Таким образом, другие клиенты, такие как iPhone, могут также использовать сервисы и т. Д. – Rippo

+0

hoe для генерации токена в качестве ориентира и для регистрации этого идентификатора токена и входа в базу данных на сервере nad, как передать этот идентификатор маркера в следующем запросе веб-сервиса.please скажите с помощью кода –

1

Вам необходимо установить тип аутентификации в IIS на веб-сервере. http://technet.microsoft.com/en-us/library/cc733010(WS.10).aspx Тип будет зависеть от вашего приложения (внутреннего приложения, внешнего и т. Д.) И того, насколько важна безопасность для вас.

Вы можете сохранить учетные данные в зашифрованном разделе в файле клиента app.config. Затем аутентифицируйтесь каждый раз, когда вы вызываете веб-сервис.

Обратите внимание, что Basic Authentication отправляет комбинацию имени пользователя/пароля в clear (base64 encoding), поэтому рекомендуется использовать SSL с этим.

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

 CredentialCache credentialCache = new CredentialCache(); 
     CredentialElement credentials = ConfigurationUtility.WebServiceCredentials; 
     NetworkCredential netCredential = new NetworkCredential(
      credentials.UserName, 
      credentials.Password, 
      credentials.Domain); 

Вы можете программно шифровать разделы конфигурации с помощью

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     ConfigurationSection section = config.GetSection(sectionName); 

     if (!section.SectionInformation.IsProtected) 
     { 
      // Protecting the specified section with the specified provider. 
      section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider"); 
     } 

     section.SectionInformation.ForceSave = true; 
     config.Save(ConfigurationSaveMode.Modified); 

Примечание: вам не нужно расшифровать раздел, это делается для вас.

Вы можете принять (любые) SSL сертификаты программным

ServicePointManager.ServerCertificateValidationCallback += this.ValidateRemoteCertificate; 

    private bool ValidateRemoteCertificate(object sender, X509Certificate certificate,  X509Chain chain, SslPolicyErrors policyErrors) 
    { 
     return true; 
    } 
Смежные вопросы