0

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

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

所以我想知道:

  • 如果用户名/密码有效、真/假值或其他什么,服务器应该返回什么?
  • 下次运行时,如何检查用户上次是否通过身份验证并已登录?我应该准确检查哪些值?考虑不允许数据篡改
  • 如果我在应用程序设置中保存散列密码,如何避免被另一个人窃取?

(在stackoverflow中是否避免了欣赏?;))

4

2 回答 2

1

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

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

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

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

于 2012-12-25T16:16:10.963 回答
0

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

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

问候,巴勃罗。

于 2012-12-26T16:30:11.307 回答