C# 如何在源代码中使用加密密码进行目录服务身份验证

C# 如何在源代码中使用加密密码进行目录服务身份验证,c#,authentication,encryption,active-directory,principalcontext,C#,Authentication,Encryption,Active Directory,Principalcontext,我编写了一个程序,通过PrincipalContext读取Active Directory中用户的UserPrincipal。为此,需要对特权用户进行身份验证。 此时,此身份验证的密码将以明文形式保存在源代码中。出于安全原因,加密密码应保存在源代码中或其他文件中。 有办法解决这个问题吗 const string domain = ""; const string rooOrganizationalUnit = ""; const string adDomain = "";

我编写了一个程序,通过PrincipalContext读取Active Directory中用户的UserPrincipal。为此,需要对特权用户进行身份验证。 此时,此身份验证的密码将以明文形式保存在源代码中。出于安全原因,加密密码应保存在源代码中或其他文件中。 有办法解决这个问题吗

    const string domain = "";
    const string rooOrganizationalUnit = "";
    const string adDomain = "";
    const string adUserName = "";
    const string adPassword = "";
    private static PrincipalContext GetPrincipalContext()
    {
        PrincipalContext principalContext;

        principalContext = new PrincipalContext(ContextType.Domain, domain, rooOrganizationalUnit, ContextOptions.Negotiate, adUserName + "@" + adDomain, adPassword);

        return principalContext;
    }

(这段代码最初取自此代码)

您不希望将其存储在加密或不加密的代码中。其中一种方法是将敏感数据转移到配置文件中,仅在生产环境中键入密码,并在应用程序中加密该部分

在配置文件中

<configuration>
    <appSettings>
        <add key="adPassword" value="this should be empty in source controll" />
    </appSettings>
</configuration>
注释

  • 您可能希望加密配置文件部分,类似于通常的工作方式
  • 如果仍然需要提交配置文件,请使用配置文件转换,并将提交文件作为模板。密码永远不会提交给源代码管理

许多选项之一是创建自定义算法对文本进行编码/解码,创建该文本的DLL,并在此程序中使用编码密码调用该文本,因此其他人解码该文本并不容易,除非他们获得自定义函数的源代码。为什么不能使用集成安全性?这将删除使用或存储密码的要求。您可以将加密字符串放入配置文件中,有多种方法可以获取字符串并在编译后对其进行加密,但只在配置文件中进行加密更容易。更多细节。@Nimesh我认为你的建议有很多问题。“自定义”和“安全性”两个词不兼容。基于频率的现代攻击可以在毫秒内强制编码。编码和加密之间有很大的区别。@oleksii你是对的,我同意,但我没有说这是最好的,也是唯一的选择。也可以根据业务关键性选择解决方案。
const string adPassword = ConfigurationManager.AppSettings["adPassword"];