2009-09-10 81 views
6

我为我的asp.net mvc 1.0 web应用程序构建了一个自定义登录系统,因为我为每个用户存储了大量用户数据(我决定不尝试为窗口添加自定义表鉴于此)。登录系统基本上使用SQL Server(2005或2008)以及我自己的数据库和非常标准的表结构。用户表与唯一的ID,用户名和散列密码链接到我的其他用户相关数据表。使用ASP.NET MVC进行Windows身份验证

我的问题是,我怎样才能使我的系统使用Windows身份验证登录。我想允许管理员为用户(在我的系统中定义)选择一个Windows身份验证登录名,并可能为我的自定义表中的某些内容添加一个值,以供我对其进行身份验证?

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

+0

我不知道确切的答案,但我认为要使用Windows身份验证您需要设置活动目录,并为您的网络上的每个人都有一个用户。然后,我认为你需要使用web.config模拟asp.net用户,你应该很好去。 – rball 2009-09-10 15:42:12

回答

8

如果您在您的网站启用了Windows身份验证,那么你应该能够使用User.Identity.Name得到他们NT/Active Directory中当前登录用户的用户名,并将其与用户表中的列进行匹配。

+0

因此,在我的actionfilter HttpContext.Current.User.Identity.Name中使用我可以访问我的用户名(MACHINE \ PHIL)并设置了IsAuthenticated。所以我需要做的就是添加另一列到我的用户表中以将我的用户名与User.IDentity.Name关联,并检查它们是否已通过身份验证? – Phil 2009-09-10 16:02:55

+1

如果User.Identity.Name返回一个值,则它们经过身份验证。更重要的是,他们不应该能够访问该页面,除非他们通过身份验证(IIS将强制他们在呈现页面之前进行身份验证)。 – Scrappydog 2009-09-10 16:16:10

1

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

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

几乎所有的Windows身份验证都是用户的用户名和能够检查与该用户关联的角色(AD组)。除此之外,您将需要手动编码。

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

How to implement authorization checks in ASP.NET MVC based on Session data?

+0

有用的评论,一些不错的背景阅读和其他想法。 – Phil 2009-09-10 16:04:50

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); 
    } 
    } 

有一些封装,我已经取出来紧凑的缘故。

+0

感谢您的有用代码片段! :) – Phil 2009-09-10 16:04:15

+0

伊恩,你会介意张贴更多的代码?我有兴趣正确地封装这个功能以及你如何配置IIS(我自己使用IIS 7)。 谢谢。 – wgpubs 2009-09-14 18:32:29