将应用程序Winform作为Web应用程序的“离线模式”

时间:2010-11-30 06:04:33

标签: security c#-3.0 forms-authentication desktop-application offline-mode

我在这里看到了类似的问题,但没有一个真正解决了我的情况,这里是设置:

我有一个带有Forms Authentication(SqlMembershipProvider)的ASP.NET应用程序,用户可以在其中提交审核结果。

我想创建一个轻量级的桌面应用程序(让我们称之为 MyApp )(使用离线),以便用户可以在没有互联网连接时提交审核结果。

以下是MUST-HAVES:

  1. 针对我的SqlMembershipProvider对用户进行身份验证(匿名用户无法提交审核结果)
  2. 仅向用户询问凭据ONCE(当他/她打开 MyApp 时)(我将能够保存身份验证令牌,但在某些情况下 MyApp 将安装在多个用户使用的笔记本电脑上,因此每次 MyApp 打开时我都必须强制用户登录)
  3. 不要以明文形式存储密码(如果用户在 MyApp 打开时处于离线状态,我想保存凭据以在连接可用时对用户进行身份验证) - 不确定这是否可行
  4. 一旦我弄清楚以上3件事情 - 其余的很容易。

    如果上述情况令人困惑,这是一个简单的场景:

    1. MyApp 安装在办公室笔记本电脑上,人们在旅行时会随身携带
    2. 2用户前往偏远地区(无互联网),并进行2次单独审核
    3. 用户1打开MyApp,提供他的用户/通行证(参见MUST-HAVES中的#2),提交3个调查结果(我将保存调查结果以及用户的凭据以验证用户并在连接可用时提交调查结果) - 见MUST-HAVES中的#1和#3
    4. 用户2打开MyApp,并执行与用户1在步骤3中执行的相同的例程。
    5. 2天后他们回到办公室,上网,第3步和第4步的结果代表各自的用户提交给我的网络应用
    6. 我已经研究过Microsoft Sync框架,但这对我正在做的事情来说似乎有些过分(而且我不确定它是否可以容纳我的MUST-HAVES)。

      我愿意接受任何替代方法,只要他们能够解释我的必须。

      感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这里隐藏着一个棘手的问题。多个用户在同一台​​笔记本电脑上输入报告的用例表明,用户必须在输入审核报告之前进行身份验证,而不是在重新连接应用程序后提交审核报告时进行身份验证。 / p>

身份验证应该告诉用户他们输入的凭据是否正确,因此您需要将用户凭据数据库与笔记本电脑同步。这是一个重大的安全风险,需要非常小心地完成,即使用户数据库已加密并使用散列的盐渍密码。您可能只希望同步一部分用户记录,例如那些将使用该应用程序的记录。

因此,假设您这样做 - 然后您可以使用在ASP.NET应用程序上使用的相同身份验证提供程序来对用户进行身份验证,并在应用程序连接时重新同步该数据库。您不需要存储除数据库之外的凭据,正如我所提到的那样,应该使用Windows data protection API或类似强大的东西加密。

如果您可以通过允许用户只需输入用户名,在重新连接时上传(但不提交)报告并允许用户将报告与其帐户相关联来满足要求,则可以简化所有这些操作。用户通过网站连接并在验证正常方式后确认上传的报告。