Как надежно передавать данные в / из публичного веб-сервиса
-
26-09-2019 - |
Вопрос
Приложение, которое я работаю над интерфейсами с существующим приложением, работающим на удаленном поле. Коммуникаторы с удаленным приложением являются с помощью своих публичных веб-сервисов. Меня попросили построить расширение, которое будет включать клиента, использующее веб-службу для обработки конфиденциальных данных, которые необходимо будет передаваться надежно.
Может ли кто-нибудь дать мне некоторые указатели на том, как лучше всего действовать?
Решение
Для начала вы должны использовать 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.
Используйте TLS (AKA SSL).
В клиенте убедитесь, что сертификат сервера является правильным.
Лучше маршрут: Используйте эксперт, который имеет созданную репутацию, чтобы помочь вам.
1 Если вы на самом деле не создаете завод ядерного оружия или аналогичные.