我已经建立了一个自定义登录系统,我的asp.net MVC 1.0的Web应用程序,因为我存储大量用户数据的每个用户(我决定不要试图为Windows身份验证添加自定义表由于这一点)。 登录系统基本使用SQL Server(2005或2008)和我自己的数据库和表结构,这是相当标准。 users表有唯一的ID,用户名和密码散列这是与用户相关的数据,我的其他表。
我的问题是,我怎么能配合我的系统使用Windows身份验证登录。 我想允许管理员为用户(在我的系统中定义)选择Windows身份验证的登录或许一个值添加到我的自定义表的东西,我可以用它来验证他们的身份?
这个问题可能是措辞错误,我可能误会了Windows身份验证是如何工作的,但我想提供我的web应用程序的选项。
如果您有您的网站启用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身份验证的用户名其他一些数据?
如果是这样,您将需要存储的用户名和一个新的表这个自定义信息。 在Active Directory中的Windows身份验证数据存在,所以你可以看看那里得到用户的列表。 你不会得到自动添加到AD任何自定义信息当Windows用户进行认证。 如果你想要的任何自定义信息,您将需要一个自定义查找加入到公元或只是取决于你决定要存储的信息查找数据库中的自定义数据。
几乎所有你的Windows身份验证得到的是用户的用户名,并检查与该用户相关联的角色(AD组)的能力。 任何超出你将需要手工编码了。
最近,我问有关实现定制超出了内置的安全MVC和与我自己的解决方案上来。 也许有一些花絮,可以帮助你回答你的问题:
如何实现基于会话数据的ASP.NET MVC授权检查?