繁体   English   中英

asp.net中的Web服务安全性

[英]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标头传递用户名和密码,嗅探数据包的任何人也可以轻松地将其删除。 即使您对数据进行加密,黑客也可以轻松地重用已加密的标头。

我会考虑做以下事情:

  1. SSL certificate放在Web服务器上( 现在这是一个非常便宜的选择
  2. 创建一个接受用户名和密码的登录服务,然后返回令牌作为引导
  3. 用户成功进行身份验证后,将令牌和loginId传递回去,将此令牌guid和登录ID记录到服务器上的数据库中。 每次用户重新登录,然后重新创建一个新的令牌guid
  4. 每次用户调用另一个Web服务时,都会传递令牌并登录并对照数据库进行检查,以确保用户仍然登录

您可以每个日期都聪明一些,以查看用户上次验证的时间,并在需要时使它们过期。

因为您使用的是SSL,所以服务器与客户端之间的连接是安全的。 传输的所有数据(包括GET和POST数据)均已加密

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM