如何安全地将数据传输到公共Web服务或从公共Web服务传输数据
我正在处理与在远程盒子上运行的现有应用程序的接口。与远程应用程序的通信通过其公共Web服务。我被要求构建一个增强功能,这将涉及一个客户端使用Web服务来处理需要安全传输的敏感数据。如何安全地将数据传输到公共Web服务或从公共Web服务传输数据
任何人都可以给我一些关于如何最好地继续下去的指针吗?
首先,您应该使用SSL并拒绝任何不使用它的请求。这将在数据通过互联网传输时加密数据。
如果您使用的是SOAP,则可以在服务中定义一个自定义标头,该标头需要用户名/密码。然后,对于每个公共方法的第一行,根据数据库验证用户名和密码。如果成功,请适当设置HttpContext.Current.User,并且您的服务将与内置的Asp.NET基础结构很好地配合。
添加:下面是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();
DIY路线:
安全读了(在移动到技术性前开始“Secrets and Lies”等这样的一般图书)
进行风险分析和评估线程。了解你正在保护什么,从什么以及威胁将来自哪里。您不太可能需要“高安全性”。
使用TLS(又名SSL)。
在客户端中,验证服务器的证书是否正确。
更好的路线:雇用谁拥有的声誉,以帮助您的专家。
除非你真的正在建设一个核武器工厂或相似。
除了3.也许4.你知道你的回应并不是非常有帮助。我是一名工作开发人员 - 在实施相对较小的功能之前,我没有时间阅读整本书;-) – 5arx 2010-11-18 10:59:16
@ 5arx步骤1和步骤2是关于正确执行步骤3和步骤4(以及*为什么*您需要让他们正确)。脚注是关于没有过度安全的顶部。步骤1非常关键,因为只是将传输层安全性放在一边不太可能提供很高的网络安全性(拦截传输中的数据不太可能成为一个重大威胁:如果服务器本身并不安全,例如内部员工,那么您未能保护您的用户可能期望受到保护的数据)。 *如果你正在寻找尽可能安全的工作,请告诉我你的应用程序名称,这样我就可以避免它。* – Richard 2010-11-18 11:17:05
我不禁想到你错过了像SO这样的网站要获得目标忠告关于其他开发者的具体问题。我猜测,我们这里的大多数人都有足够的智慧认识到,在理想的世界中,我们可能应该广泛阅读这个主题,或者更好的是,在这个领域的专家顾问中掏出数千美元。 但是,在现实世界中,我们有客户尖叫关于截止日期,只需要完成任务;陈腐的建议,如“读一本关于它”或“尝试谷歌搜索的答案”只是不会洗我恐怕;-) – 5arx 2010-11-18 13:20:35
什么样的Web服务的SOAP的? WCF?你只需要运输安全或认证? – 2010-11-18 10:20:34
@Dirk - 我相信它是一个SOAPy的。我想我只需要运输安全,这些服务都是公开的。 – 5arx 2010-11-18 10:54:36