我在web.config文件中添加了以下设置,以启动对外部系统的API调用.所以我存储API URL +用户名+密码如下: -
然后在我的action方法中,我将在构建Web客户端时引用这些值,如下所示: -
public ActionResult Create(RackJoin rj, FormCollection formValues) { XmlDocument doc = new XmlDocument(); using (var client = new WebClient()) { var query = HttpUtility.ParseQueryString(string.Empty); foreach (string key in formValues) { query[key] = this.Request.Form[key]; } query["username"] = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiUserName"]; query["password"] = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiPassword"]; string apiurl = System.Web.Configuration.WebConfigurationManager.AppSettings["ApiURL"];
但在这一点上,我将公开用户名和密码,这些可以被用户捕获,所以我的问题是如何保护API用户名和密码?
通常,web.config是一个安全文件,IIS不提供它,因此它不会向向Web服务器发出请求的用户公开.Web服务器只提供特定类型的文件,web.config肯定不是其中之一.
通常,您将数据库连接字符串保存在其中,其中包括密码.现在想象一下web.config不安全的场景.您已为应用程序创建了主要的安全威胁.
因此,特别是只要你的项目不是太大,你就不应该担心它.
然而,您可能有更好的方法,但创建一个名为"资源"的项目,并保存所有关键信息,如设置,consts,枚举等.这将是一个光滑和有组织的方法.
如果您通过网络传递用户名/密码(例如,在安全的API调用的情况下),您可能希望使用https来确保正在传输的信息是加密的,但这与安全性无关web.config文件.
您可以使用aspnet_regiis加密web.config.这是为了阻止有权访问您服务器的人员阅读敏感信息.
顺便说一句,我会把你的配置设置放在一个类中,然后可以将它注入你的控制器 - 这将使单元测试更容易.