【发布时间】:2016-06-13 16:16:22
【问题描述】:
我正在使用 ASP.Net WebAPI 和 WPF 开发客户端/服务器应用程序。 现在我正在考虑通过 https 使用基本身份验证对客户端进行身份验证。您可以提出更好的解决方案,但 Windows 身份验证和服务器端会话对我不起作用。
对于基本身份验证,我需要客户端上的纯文本 (base64) 密码,以便在每次请求时通过网络发送,对吗?
但我不希望用户在每次请求时都重新输入密码,所以我在应用程序启动时有一个登录窗口。
WPF PasswordBox 使用 SecureString 并且未绑定到视图模型。但至少在请求之前,我必须将密码作为普通字符串将其编码为 base64。 所以不管我做什么,密码迟早都会以纯文本形式保存在 RAM 中。
为以后的请求保留密码的最佳做法是什么?
- 缓存密码框
- 缓存 SecureString
- 缓存纯文本字符串,因为无论哪种方式它都会在 RAM 中
- 缓存 base64 编码的字符串,因为至少它是模糊的 ;)
- ...?
那么我该如何以一种相当安全的方式来处理这个问题呢? 大玩家(MS、Google、Apple 等)的其他应用程序不会在每次通话时都要求我输入密码,因此必须有办法。
【问题讨论】:
-
您到底为什么要以 Base64 格式发送密码?这是一种简单的、未加密的编码,使用它为您做的就是使用更多的内存。 Base64 通常用于将二进制数据编码为字符串,而不是将字符串编码为较长的字符串。
-
首先我要感谢您强调这一点,因为谈论安全主题是人们应该知道的。在这种情况下,base64 并没有真正帮助你是绝对正确的。我知道,在问这个问题之前我就知道了。这就是我写的原因:至少它是模糊的;) 但是为什么是base64?因为这就是基本身份验证与 WebAPI 一起工作的方式:see asp.net-site
标签: c# asp.net wpf authentication asp.net-web-api