Как безопасно передавать данные в / из общедоступной веб-службы - PullRequest
2 голосов
/ 18 ноября 2010

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

Может ли кто-нибудь дать мне несколько советов о том, как лучше поступить?

Ответы [ 2 ]

4 голосов
/ 18 ноября 2010

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

Если вы используете SOAP, вы можете определить в своей службе собственный заголовок, который принимает имя пользователя / пароль.Затем в первой строке каждого открытого метода проверьте имя пользователя и пароль по базе данных.В случае успеха установите соответствующий HttpContext.Current.User, и ваш сервис будет хорошо привязан к встроенной инфраструктуре Asp.NET.

ADDED: Ниже приведен пример SoapHeader, который включаетимя пользователя / пароль для аутентификации.

// define the header
public class AuthenticationHeader : SoapHeader
{
    public String UserName { get; set; }
    public String Password { get; set; }
}

// your service
public class PublicWebService : WebService
{
    // defines an instance of the header as part of the service
    public AuthenticationHeader Authentication;

    private void Authenticate()
    {
        // validate the username / password against a database
        // set the HttpContext.Current.User if successful.
        // Maybe throw a SoapException() if authentication fails
    }

    // Notice the SoapHeader("Authentication") attribute...
    // This tells ASP.Net to look for the incoming header for this method...
    [WebMethod]
    [SoapHeader("Authentication")]
    public void PublicMethod1()
    {
        Authenticate();

        // your code goes here
    }

    // Expose another method with the same authentication mechanism
    [WebMethod]
    [SoapHeader("Authentication")]
    public void PublicMethod2()
    {
        Authenticate();

        // your code goes here
    }
}

Теперь, если вы запустите утилиту wsdl, сгенерированный прокси-класс будет содержать определенный заголовок аутентификации:

PublicWebService s = new PublicWebService();
s.Authentication = new AuthenticationHeader();
s.Authentication.UserName = "xxxxxxxx";
s.Authentication.Password = "yyyyyyyy";
s.PublicMethod1();
s.PublicMethod2();
0 голосов
/ 18 ноября 2010

DIY маршрут:

  1. Читайте о безопасности (начните с " Секреты и ложь " и других подобных общих книг, прежде чем перейти к техническим вопросам)

  2. Выполните анализ риска и оценку потока.Понять, что вы защищаете и от чего и откуда исходят угрозы.Вам вряд ли понадобится «Высокий уровень безопасности» 1 .

  3. Использовать TLS (он же SSL).

  4. Вклиент, проверьте правильность сертификата сервера.

Лучший маршрут: нанимайте эксперта, который имеет репутацию, чтобы помочь вам.


1 Если только вы на самом деле не строите завод по производству ядерного оружия или тому подобное.

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