【问题标题】:ASP.NET MVC - How to safely persist password of a user for SQL Server Authentication?ASP.NET MVC - 如何安全地保存用户密码以进行 SQL Server 身份验证?
【发布时间】:2020-10-27 11:49:24
【问题描述】:

我有一个使用 SQL Server 后端的 ASP.NET MVC 应用程序。但是,SQL Server 的身份验证方法是 SQL Server 身份验证,这意味着我需要询问用户密码才能通过我的应用程序连接到数据库。

理想情况下,我不想要求密码一次,为会话建立从应用程序到数据库的永久连接,然后完全忘记密码,因为我想打开和关闭与数据库的连接仅在执行数据库操作时才需要。

但显然,我也不想将他们的密码存储在 Session 对象中,无论应用程序是否将是 https 连接并面向内部,因为这是一个很大的禁忌。

在会话期间保持密码最​​安全的方法是什么?

我无法更改身份验证方法,理想情况下我想使用 Windows 身份验证,但这是不可能的。

【问题讨论】:

  • 是否将连接字符串存储在web.config 中?您可以encrypt 敏感部分和/或使用 CI/CD 工具来确保没有人可以访问该机器
  • 是什么阻碍了你以正常的方式间接地做到这一点?因此,当用户设置他的 PW 时,您将对其进行散列并将散列版本设置为用户的 SQL Server PW。当用户随后登录时,您只需在会话期间存储散列版本。那么,用户是否可以使用其他应用程序登录或直接连接到数据库?
  • 你可以使用cookie
  • @PatrickBeynio 用户可以访问使用此密码登录的 WPF 应用程序。此外,他们也可以通过 SSMS 直接连接到数据库。他们的密码最初是由服务器的 DBA 分配的,然后用户必须在第一次通过 SSMS 登录服务器时更改它 - 所以我不能为他们散列并将其设置为密码。我也没有 DBA 级别的权限这样做
  • @timur 这可能是一个选择,我可能需要进一步调查,看看它是否可行

标签: c# asp.net-mvc passwords


【解决方案1】:

您有两种选择来解决这个问题。

  1. 如果您使用的是 asp.net 身份,则可以为用户身份添加自定义声明,该声明将保存在身份验证 cookie 中以供会话使用。在此处查找示例和文章:

How to add claims in Asp.Net Identity

Adding Custom Claims when Logging In with Asp.Net Core Identity Cookie

  1. 如果您不使用 Asp.net Identity,而是遵循旧式 Forms 身份验证,则可以将其作为自定义用户数据添加到身份验证 cookie 中。

How to store some custom data in form auth cookie

身份验证cookie中保存的用户数据将被加密,可以轻松检索,并在注销或会话到期后被丢弃。如果您的应用程序托管在与会话变量不同的服务器场上,它也将是线程安全的。

【讨论】:

  • 我最终选择了表单身份验证 Cookie,干杯!
猜你喜欢
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
  • 1970-01-01
相关资源
最近更新 更多