【问题标题】:Local Password Storage in .NET.NET 中的本地密码存储
【发布时间】:2015-01-17 23:43:50
【问题描述】:

我正在编写一个 WPF 应用程序,它使用 REST 与远程 Web 服务进行通信。该应用程序要求用户输入他们的用户名和密码,因为 REST API 的某些功能需要身份验证。我想知道如何将密码安全地存储在我的 WPF 应用程序中。在服务端,我通过用随机盐对其进行加盐来存储它,然后使用 SHA256 对其进行哈希处理。我是否应该创建一个 REST 命令来返回安全密码(即散列和加盐密码)并在使用 REST 时将其提供给服务器?

【问题讨论】:

    标签: .net security rest


    【解决方案1】:

    根本不要将其存储在本地。通过 HTTPS 将其传递给服务器,并让服务器返回一个身份验证令牌,该令牌可用于后续调用而不是登录。令牌可以只是一个任意随机数,除了通过服务器上的映射外,没有与特定用户的连接。您正在使用 HTTPS 进行 REST 调用,对吗?您将需要登录和注销功能,登录以生成身份验证令牌并注销以使其无效,此外您可以在令牌上设置到期日期以限制其有效期。

    【讨论】:

      【解决方案2】:

      如果每次启动 WPF 应用程序时都提示用户输入用户名和密码是可以的,则将凭据保存在内存中。您可以使用SecureString 将密码保存在内存转储之外。

      如果您不想在用户每次启动应用程序时都提示输入凭据,请查看使用 OAuth 2.0。您的应用程序将让用户针对授权服务器进行身份验证。此服务器返回访问令牌和刷新令牌。您可以使用访问令牌与 REST API 对话,并且可以使用刷新令牌在过期时获取新的访问令牌。

      如果您想将刷新令牌安全地存储在用户的机器上,请查看 Windows 数据保护 (DPAPI) 以在存储令牌之前对其进行加密。

      【讨论】:

        猜你喜欢
        • 2018-07-28
        • 1970-01-01
        • 2017-03-23
        • 1970-01-01
        • 1970-01-01
        • 2013-06-02
        • 2015-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多