在每次调用时调用需要用户名和密码的SOAP服务。我该如何存储密码?

时间:2016-04-25 19:25:32

标签: windows web-services security soap

我在一个通过SSL调用SOAP Web服务的库中编写一个类。 SOAP服务需要在每次调用时传入用户名和密码。该库将由公共网站的服务器代码引用。我不确定存储密码的标准/最佳方式是什么。

我看到的选项......

  • 将密码硬编码为类
  • 中的字符串
  • 将密码存储在数据库中
  • 将密码存储在配置文件

这些都不会让我感到安全且容易更新。

1 个答案:

答案 0 :(得分:1)

我不是安全专家,我几年没有完成任何.NET开发(因此信息可能已经过时)但是这里有一些可能有帮助的想法/建议你。

  

将密码硬编码为类

中的字符串
不要这样做。您的源代码是版本控制(TFS,Git,无论如何),因此将是用户名/密码,从您签入代码的那一刻起,每个开发人员都可以看到...永远。为了保护对用户名/密码的访问,您现在必须安全地访问源存储库。我想所有开发人员都需要访问源代码,但并不是所有人都需要知道用户名/密码。

  

将密码存储在数据库中

根据您的个人资料,我假设您使用SQL服务器? See what encryption options are available to SQL server如果你想走那条路。也许其中一个就足以满足您的使用需求。

  

将密码存储在配置文件

同样,这可能最终会在源代码管理中出现,但它并不像第一个选项那么糟糕,因为你可以encrypt parts of the config提交文件(我根据你的个人资料假设C#)。

如果您可以控制SOAP服务,则可以将其从需要用户名/密码更改为使用相互身份验证。您在客户端上安装证书(拒绝导出密钥)并仅允许从安装了证书的客户端调用Web服务(您也可以在开发人员的计算机上安装)。

解决方案实际上取决于保护此用户名/密码的重要程度,即您想要的安全级别(您没有在问题中指明)。

如果它不是非常重要,您可以将它作为您的要点2)放在数据库中,或者放在从配置中引用的外部文件(未在源代码管理中提交)上,并将文件放在服务器上或开发机器。然后,您基本上可以控制对计算机的访问(假设所有开发人员在从键盘起床时锁定他们的PC)。

如果保护这一点真的非常重要,你可以在https://security.stackexchange.com/上询问比我能给你的更好的建议:)。