Как надежно передавать данные в / из публичного веб-сервиса

StackOverflow https://stackoverflow.com/questions/4213663

Вопрос

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

Может ли кто-нибудь дать мне некоторые указатели на том, как лучше всего действовать?

Это было полезно?

Решение

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

Если вы используете SOAP, вы можете определить пользовательский заголовк в вашем обслуживании, который принимает имя пользователя / пароль. Затем для первой строки в каждом общественном методе проверяйте имя пользователя и пароль против базы данных. Если успешно, установите httpContext.current.user соответствующим образом, и ваш сервис будет хорошо связаться со встроенным инфраструктурой ASP.NET.

ДОБАВЛЕН: Ниже приведен образец Safheader, который включает в себя имя пользователя / пароль для аутентификации.

// 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();

Другие советы

DIY маршрут:

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

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

  3. Используйте TLS (AKA SSL).

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

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


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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top