如何缓存桌面应用程序客户端的登录数据

时间:2012-12-25 15:59:30

标签: c# winforms authentication asp.net-web-api

有一个winform客户端连接到服务器并通过提供用户名和密码进行身份验证。

用户第一次将他的用户名/密码发送到服务器,之后如果没有注销,则无需再次进行身份验证(如Github客户端或Windows Live Mail

所以我想知道:

  • 如果用户名/密码有效,应该返回什么服务器,a 真/假值还是其他什么?
  • 在下一次运行中,我该如何检查 如果用户上次验证并登录?哪些值应该 我确切地检查了?考虑不允许数据篡改
  • 如果我在应用设置中保存哈希密码,我怎样才能避免被其他人窃取呢?

(在stackoverflow中,我们是否感到欣赏?))

2 个答案:

答案 0 :(得分:1)

这完全取决于您要保护的资源的价值;还有谁可以访问本地计算机等。

  1. 只需在应用程序中缓存用户名/密码即可。用户第一次输入用户名/密码时将其保存在注册表中的某个位置。下次启动应用程序时,请从注册表中读取并将值提供给服务器。

  2. 这显然是一个安全风险,因为有人可以从注册表中读取用户名/密码,因此在使用encrypt-decrypt-string-in-net之类的内容将用户名/密码保存到注册表之前对其进行加密。

  3. 下一个问题是您可能需要在应用中对解密密钥进行硬编码。这意味着任何有权访问您的应用程序二进制文件的人都可以计算您正在使用的算法/密钥,并使用该知识来解密存储在注册表中的密钥。但到了这个时候,大多数琐碎的尝试都会被劝阻。您可以尝试使用CryptProtectData function,因此您不必在应用中对加密密钥进行硬编码,但它更复杂。

答案 1 :(得分:0)

如果您不想在应用程序中保留用户名/密码,则可以使用HMAC身份验证。您使用用户名/密码在第一次呼叫期间对用户进行身份验证,但如果身份验证成功,则会返回会话密钥作为响应。您可以使用该会话密钥对其余呼叫进行身份验证,如此处所示,

http://weblogs.asp.net/cibrax/archive/2012/12/05/using-mac-authentication-for-simple-web-api-s-consumption.aspx

此致 巴勃罗。