Como transmitir dados com segurança de/para um serviço público da Web
-
26-09-2019 - |
Pergunta
Um aplicativo que estou trabalhando em interfaces com um aplicativo existente em execução em uma caixa remota. A Communicaitons com o aplicativo remoto é através de seus serviços públicos da Web. Foi -me pedido para criar um aprimoramento que envolverá um cliente usando o serviço da Web para lidar com dados confidenciais que precisarão ser transmitidos com segurança.
Alguém poderia me dar algumas dicas sobre a melhor forma de proceder?
Solução
Para começar, você deve usar o SSL e rejeitar quaisquer solicitações que não o estejam usando. Isso criptografará os dados à medida que estão sendo transmitidos pela Internet.
Se você estiver usando SOAP, poderá definir um cabeçalho personalizado em seu serviço que pega um nome de usuário / senha. Então, para a primeira linha em cada método público, valide o nome de usuário e a senha em relação a um banco de dados. Se for bem -sucedido, defina o httpcontext.current.user apropriadamente e seu serviço irá amarrar bem com a infraestrutura de ASP.NET incorporada.
ADICIONADO: Abaixo está um amostra de SoaPheader que inclui um nome de usuário / senha para autenticação.
// 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
}
}
Agora, se você executar a ferramenta WSDL, a classe Proxy gerada incluirá o cabeçalho de autenticação definido:
PublicWebService s = new PublicWebService();
s.Authentication = new AuthenticationHeader();
s.Authentication.UserName = "xxxxxxxx";
s.Authentication.Password = "yyyyyyyy";
s.PublicMethod1();
s.PublicMethod2();
Outras dicas
Rota DIY:
Leia sobre segurança (comece com "Segredos e mentiras"E outros livros gerais antes de passar para os técnicos)
Realize uma análise de risco e avaliação de threads. Entenda o que você está protegendo e do que e de onde as ameaças virão. É improvável que você precise de "alta segurança"1.
Use TLS (também conhecido como SSL).
No cliente, verifique se o certificado do servidor está correto.
Melhor rota: Empregue um especialista que tenha uma reputação estabelecida para ajudá -lo.
1 A menos que você realmente esteja construindo uma planta de armas nucleares ou similar.