[英]web service security in asp.net
我正在研究一个项目,我们正在其中创建一个从桌面应用程序调用的Web服务。我的问题是,当他们从桌面应用程序调用时,如何为Web方法提供安全性,以便只有经过身份验证的成员才能访问该方法。 我如何通过SOAP标头传递用户名和密码。
但是,并非总是在我调用方法时,我想验证用户名和密码。我只想在用户首次调用Web方法时对用户进行身份验证,而在下一次调用时,将生成令牌,我们将使用该令牌供将来参考。
请立即为我解决所有这些问题。 或暗示对Web服务的安全性的另一种方法。 请提供编码解决方案。
您需要在Web服务器上的IIS中设置身份验证类型。 http://technet.microsoft.com/zh-cn/library/cc733010(WS.10).aspx类型取决于您的应用程序(内部应用程序,外部应用程序等)以及安全性对您而言是否重要。
您可以将凭据存储在客户端app.config文件中的加密部分中。 然后,在每次调用Web服务时进行身份验证。
请注意,基本身份验证以明文形式(base64编码)发送用户名/密码组合,因此建议对此使用SSL。
您可以像这样创建要传递给Web服务的凭据(其中ConfigurationUtility是自定义帮助程序类,而WebServiceCredentials是从配置文件中的自定义config部分检索凭据)。
CredentialCache credentialCache = new CredentialCache();
CredentialElement credentials = ConfigurationUtility.WebServiceCredentials;
NetworkCredential netCredential = new NetworkCredential(
credentials.UserName,
credentials.Password,
credentials.Domain);
您可以使用以下方式以编程方式加密配置节
System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSection section = config.GetSection(sectionName);
if (!section.SectionInformation.IsProtected)
{
// Protecting the specified section with the specified provider.
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
}
section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Modified);
注意:您不需要解密该部分,这已为您完成。
您可以以编程方式接受(任何和所有)SSL证书
ServicePointManager.ServerCertificateValidationCallback += this.ValidateRemoteCertificate;
private bool ValidateRemoteCertificate(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors policyErrors)
{
return true;
}
即使您通过soap标头传递用户名和密码,嗅探数据包的任何人也可以轻松地将其删除。 即使您对数据进行加密,黑客也可以轻松地重用已加密的标头。
我会考虑做以下事情:
SSL certificate
放在Web服务器上( 现在这是一个非常便宜的选择 ) 您可以每个日期都聪明一些,以查看用户上次验证的时间,并在需要时使它们过期。
因为您使用的是SSL,所以服务器与客户端之间的连接是安全的。 传输的所有数据(包括GET和POST数据)均已加密
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.