但它让我想知道 – 这是最好的方法吗?
我想知道Asp.Net Core最好的sql Server登录方法是什么.我知道有一个类似于普通.NET的问题,但是你无法加密Core web.config / appsettings.json(嗯,以一种快速而直接的方式).
以下是我看到的选项:
通过存储在appsettings.json中的sql Server ID进行连接.
> Pro:已经配置好了.
>缺点:web.config / appsettings.json中的密码;必须专门配置sql Server ID.不集中可撤销.
通过ASP.NET“AppIdentityUser”通过用户NT ID连接.
> Pro:appsettings.json中没有密码.
>缺点:不可集中撤销.似乎仅限于用户的服务器名称.
通过Active Directory用户连接.
>专业:轻松可以撤销.
>缺点:appsettings.json中的Active Directory用户密码.如果有人不小心在公司的另一个应用程序中重用该用户,并且该用户被破坏,那可能会很糟糕.
我还缺少其他选择吗?在哪些情况下使用以下哪些选项?哪个更标准?有没有我不考虑的利弊?
解决方法
您似乎在这里遇到的真正问题是不希望(正确地)以纯文本形式公开登录凭据.我不知道为什么你在这里继续引用Web.config,因为ASP.NET Core没有使用它.相反,可以选择使用各种配置提供程序.默认情况下,ASP.NET Core(至少从2.0开始)添加了一个JSON配置提供程序,用于在项目中查找appsettings.json和appsettings.{environment} .json,命令行配置提供程序,用户机密配置提供程序,以及最后是环境变量配置提供程序.
最后两个对你的情况最有意思.在开发中,您应该使用用户机密.在生产中,您应该使用环境变量.但是,两者都不以加密的方式存储秘密.这两种方法的好处是秘密不在您的项目中,因此也不在您的源代码管理中.尽管两者都没有加密,但它并不像你想象的那么大.在任何一个中获取秘密都需要直接访问服务器/开发机器.此外,用户机密默认绑定到特定用户帐户,只能由该用户访问,并且环境变量可以以相同的方式设置.因此,有人需要获得对计算机的访问权并获得对特定帐户的访问权限.这实际上是一个相当高的标准,如果它发生,那么暴露数据库密码实际上是你最不关心的问题.
但是,如果您需要真正的加密,则可以选择使用Azure KeyVault.无论您的应用程序是否实际托管在Azure中,都可以使用KeyVault,虽然它不是免费的,但它非常便宜.
最后,您始终可以创建自己的配置提供程序或源第三方配置提供程序.例如,虽然默认的JSON提供程序不支持加密,但您可能会写一个.