【问题标题】:Implement IPrincipal in winforms project在winforms项目中实现IPrincipal
【发布时间】:2009-12-19 19:33:39
【问题描述】:

我正在尝试在我当前的 winforms 项目中实现授权和身份验证。身份验证还必须匹配 SQL Server 2008 数据库中的用户。问题是,它是一个多用户程序,所以当添加新用户时,会创建一个数据库并将用户身份添加到数据库中。

我想知道这是否可以实现 IPrincipal 和 IIdentity。到目前为止,我只找到了 ASP.NET 实现。

谁能给我一些指导,了解在 winforms 应用程序中实现密码/用户 ID 安全性的最佳方法是什么?请记住,它必须使用 SQL Server 中的数据库进行验证。

意味着该用户必须存在数据库,并且他们的凭据必须正确。

【问题讨论】:

  • 如何验证用户和随后如何代表经过验证的用户是两件不同的事情。您是在问如何实现 IPrincipal,或者如何使用用户名/密码机制对用户进行身份验证?
  • 我其实很想知道如何使用 psw/username 对用户进行身份验证?
  • 你确定这真的是你想要做的吗?为富客户端使用自定义身份验证机制是一件非常不寻常的事情。通常,依靠 Windows 内置的安全机制要好得多。也许我们在这里需要一些上下文。信息亭类型的应用程序是我能想到的少数几个例子之一。
  • 我的应用程序是用于存储需要安全的数据的应用程序,所以我想实现自己的机制,但是 windows 可以提供什么?我不确定您所说的“信息亭型应用程序”是什么意思?
  • 好吧,对于身份验证,Windows 有一个登录屏幕,可确保当前登录的用户是正确的。但是,我必须承认我仍然对您的要求感到困惑,因为现在您正在谈论存储敏感数据,这与验证用户的目标不同。

标签: c# winforms forms-authentication


【解决方案1】:

您可以通过编写实现该接口的类来实现您自己的IPrincipal 对象。

由于您将使用 Windows 以外的来源提供用户名和密码,因此您还需要编写自己的 IIdentity 实现。

幸运的是,这些接口并不大。

对于您的自定义IIdentity,我将创建一个登录表单,尝试在 SQL 2008 数据库中查找用户名/密码组合。如果找到,那么您唯一关心的是如何填充该用户的“角色”,以便为界面外的IsInRole(string roleName) 方法提供功能。

这是detailed article on how to accomplish in both Winforms and ASP.NET的链接

更新

此外,一旦将此主体附加到当前线程(以及后续创建的线程),您还可以向代码中添加“要求”当前主体属于给定角色或具有给定名称的属性。

一篇不错的example of that is this 文章。

【讨论】:

  • @TonyTheLion - 您介意将此答案标记为已接受吗?
猜你喜欢
  • 2010-12-25
  • 2011-11-03
  • 1970-01-01
  • 2011-03-26
  • 2012-12-04
  • 2015-09-08
  • 2012-01-30
  • 2021-01-01
  • 1970-01-01
相关资源
最近更新 更多