C#在自定义应用程序中提供不同类型的身份验证

时间:2011-12-05 20:44:20

标签: c# .net authentication authorization identity

我在C#中构建一个包含基于数据库的授权系统的客户端应用程序。

通过以下界面抽象身份验证:

public interface IAuthorizationRequest {
    bool IsUserValid(string userName, string password);
}

我理解如何使用C#查询活动目录,但想知道如何将用户的活动目录帐户与我已提供的数据库身份验证系统相关联。如果用户希望将其身份验证与其Active Directory系统集成,而不是使用我的内置身份验证,我该如何提供此功能?

此外,我假设我仍然需要用户数据库才能存储首选项和个人资料信息。是否可以使用C#检索某种独特的Active Directory标识符,以将用户帐户绑定到Active Directory帐户?

将Active Directory用户或多或少地导入应用程序并创建与相应Active Directory条目绑定的本地应用程序用户帐户是否合适?

我一直在网上搜索这个答案,但问题似乎是我真的不知道如何制定我要问的问题。

注意:我不打算使用ASP.NET身份验证提供程序,因为这是一个带有集中式数据库服务器的客户端应用程序。

我一直在研究WIF(Windows Identity Foundation),但不确定这是否是最佳方法。

提前致谢!

2 个答案:

答案 0 :(得分:1)

WIF可以帮助您构建Web应用程序,但似乎不是您的选择。

如果我理解正确,您正在构建Windows应用程序?如果是这样,为什么不坚持使用集成身份验证?您的用户无需登录应用程序,因为它们已经过操作系统的身份验证。您可以使用WindowsIdentity.GetCurrent().Name来询问当前用户的凭据。

如果无法选择集成身份验证,您仍然可以使用AD,此链接可以帮助您入门:

http://www.codeproject.com/KB/system/everythingInAD.aspx

最后一件事 - 是的,您必须以某种方式将AD属性之一分配给您的用户表,以便每当AD用户登录您的应用程序时,您都可以在数据库中识别他/她。提前导入帐户可以是一个选项,或者您可以“动态”创建帐户。但是,如果用户已经存在于您的数据库中,并且AD集成只是另一种形式的身份验证,您可以要求您的用户使用现有凭据(存储在您的数据库中)进行日志记录,询问他们的AD身份以及两个身份验证源是否成功验证,您可以将AD中的信息合并到用户记录中。

答案 1 :(得分:1)

我会将AD用户名放入用户表中,如@Wiktor所述,我会尝试使用依赖注入来选择为给定用户使用哪种身份验证模型(假设用户直接选择使用哪种模型) ,从单选按钮或下拉菜单说。)