使用ASP.NET MVC进行Windows身份验证
我为我的asp.net mvc 1.0 web应用程序构建了一个自定义登录系统,因为我为每个用户存储了大量的用户数据(因此我决定不尝试为windows身份验证添加自定义表)。登录系统基本上使用SQL Server(2005或2008)和我自己的数据库和表结构,这是相当标准的。具有唯一id、用户名和哈希密码的用户表,该表链接到我的其他用户相关数据表 我的问题是,如何将我的系统绑定到使用Windows身份验证登录。我想允许管理员为用户(在我的系统中定义)选择一个Windows身份验证登录,并可能在我的自定义表中添加一个值,我可以使用该值对他们进行身份验证使用ASP.NET MVC进行Windows身份验证,asp.net,asp.net-mvc,windows-authentication,Asp.net,Asp.net Mvc,Windows Authentication,我为我的asp.net mvc 1.0 web应用程序构建了一个自定义登录系统,因为我为每个用户存储了大量的用户数据(因此我决定不尝试为windows身份验证添加自定义表)。登录系统基本上使用SQL Server(2005或2008)和我自己的数据库和表结构,这是相当标准的。具有唯一id、用户名和哈希密码的用户表,该表链接到我的其他用户相关数据表 我的问题是,如何将我的系统绑定到使用Windows身份验证登录。我想允许管理员为用户(在我的系统中定义)选择一个Windows身份验证登录,并可能在我
这个问题的措辞可能是错误的,我可能误解了Windows身份验证的工作原理,但我想在我的web应用程序中提供此选项。如果我正确理解您的问题,您想添加一些链接到Windows身份验证用户名的其他数据吗 如果是这样,则需要将用户名和此自定义信息存储在新表中。windows身份验证数据存在于Active Directory中,因此您可以在那里查看以获取用户列表。当Windows对用户进行身份验证时,您不会自动将任何自定义信息添加到AD中。如果您想要任何自定义信息,您需要将自定义查找添加到AD中,或者根据您决定存储信息的位置在数据库中查找自定义数据 通过Windows身份验证,您几乎可以获得用户的用户名以及检查与该用户关联的角色(广告组)的能力。除此之外,您需要手动编写代码 我最近询问了在MVC内置安全性之外实现定制的问题,并提出了自己的解决方案。也许有一些小道消息可以帮助你回答你的问题:
如果您的站点上启用了Windows身份验证,那么您应该能够使用User.Identity.Name获取当前登录用户的NT/Active Directory用户名,并将其与用户表中的一列相匹配。以下是我们为混合表单/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);
}
}
为了简洁起见,我去掉了一些封装。我不知道确切的答案,但是:我认为要使用windows auth,您需要设置active directory,并为网络中的每个人指定一个用户。然后,我认为您需要使用web.config模拟asp.net用户,您应该可以开始了。因此,在我的actionfilter HttpContext.Current.user.Identity.Name中使用,我可以访问我的用户名(MACHINE\PHIL),并设置IsAuthenticated。因此,我所需要做的就是在我的用户表中添加另一列,将我的用户名与user.IDentity.Name关联,并检查它们是否经过身份验证?如果user.IDentity.Name返回一个值,则它们已通过身份验证。更重要的是,除非经过身份验证,否则他们将无法访问页面(IIS将强制他们在呈现页面之前进行身份验证)。有用的评论,一些不错的背景阅读和其他想法。Iain,你介意发布更多的代码吗?我对正确封装此功能以及如何配置IIS感兴趣(我自己也在使用IIS 7)。谢谢