6

我为我的 asp.net mvc 1.0 Web 应用程序构建了一个自定义登录系统,因为我为每个用户存储了大量的用户数据(因此,我决定不尝试为 windows 身份验证添加自定义表)。登录系统基本上使用 SQL Server(2005 或 2008)和我自己的数据库和表结构,非常标准。具有唯一 ID、用户名和哈希密码的用户表,该表链接到我的其他用户相关数据表。

我的问题是,如何绑定我的系统以使用 Windows 身份验证登录。我想允许管理员为用户(在我的系统中定义)选择一个 Windows 身份验证登录名,并可能在我的自定义表中添加一个值,我可以用来对他们进行身份验证?

这个问题的措辞可能是错误的,我可能误解了 Windows 身份验证的工作原理,但我想在我的 Web 应用程序中提供该选项。

4

3 回答 3

8

如果您在您的站点上启用了 Windows 身份验证,那么您应该能够使用 User.Identity.Name 来获取当前登录用户的 NT/Active Directory 用户名,并将其与用户表中的列相匹配。

于 2009-09-10T15:45:50.333 回答
8

以下是我们为混合表单/Windows 身份验证应用程序所做的:-

public class MyBaseController
{
  protected override void OnAuthorization( AuthorizationContext authContext )
  {
    if
    (
      !User.Identity.IsAuthenticated &&
      Request.LogonUserIdentity != null &&
      Request.LogonUserIdentity.IsAuthenticated
    )
    {
      String logonUserIdentity = Request.LogonUserIdentity.Name;
      if ( !String.IsNullOrEmpty(logonUserIdentity) )
      {
        User loginUser =
          Context.Users.FirstOrDefault(
            x => x.UserIdentity == logonUserIdentity);
        if ( loginUser != null )
          FormsAuthentication.SetAuthCookie(
            loginUser.LoginName,createPersistentCookie);
    }
  }

为了紧凑起见,我取出了一些封装。

于 2009-09-10T15:46:31.660 回答
1

如果我正确理解您的问题,您想添加一些链接到 Windows Authenticated 用户名的其他数据吗?

如果是这样,您将需要将用户名和此自定义信息存储在新表中。Windows 身份验证数据存在于 Active Directory 中,因此您可以查看那里以获取用户列表。当 Windows 对用户进行身份验证时,您不会自动将任何自定义信息添加到 AD。如果您需要任何自定义信息,您需要在 AD 中添加自定义查找,或者根据您决定存储信息的位置在数据库中查找自定义数据。

使用 Windows 身份验证获得的几乎所有内容都是用户的用户名以及检查与该用户关联的角色(AD 组)的能力。除此之外,您需要手动编码。

我最近询问了如何在 MVC 中的内置安全性之外实现自定义,并自己提出了一个解决方案。也许有一些花絮可以帮助你回答你的问题:

如何在 ASP.NET MVC 中基于 Session 数据实现授权检查?

于 2009-09-10T15:44:43.300 回答