asp.net与域控制器的身份

时间:2015-12-17 16:14:03

标签: asp.net-mvc claims-based-identity

我需要实现使用域用户/密码对用户进行身份验证,如果他们在域控制器中,但应用程序也应该可供其他用户使用,谁应该使用自己的用户名/密码进行身份验证;这应存储在应用程序数据库中,并根据数据库检查其用户名/密码。

到目前为止,我开始使用vs2015中的新asp.net模板,选择个人用户帐户。 我能够再次验证用户的域控制器,但如果成功,我将无法将用户存储到HttpContext.User属性。

在SignInManager中,我调用PasswordSignIn并根据AD检查返回成功或失败。

public SignInStatus PasswordSignIn(string userName, string password, bool isPersistent, bool shouldLockout) {
  if(AuthenticateAD(userName, password)) {
//
// to create identity/principal and assign to HttpContext.User
//
    return SignInStatus.Success;
  }
  else {
    return SignInStatus.Failure;
  }
}

public bool AuthenticateAD(string username, string password) {
  using(var context = new PrincipalContext(ContextType.Domain, "domainname")) {
    return context.ValidateCredentials(username, password);
  }
}

感谢任何提示!

2 个答案:

答案 0 :(得分:0)

这真正有效的唯一方法是,如果您在应用程序中为AD中的用户创建代理用户。实质上,您只需设置一个脚本,根据计划中的AD中的数据(根据您的需要每晚等)填充新用户/更新现有用户。然后,您只处理一种类型的用户,无论他们是域还是外部用户。您需要做的唯一更改是通过AD或标准密码身份验证进行选择性身份验证。无论哪种方式,都在使用相同的用户主体。

答案 1 :(得分:0)

您可以使用ADFS并允许用户选择身份验证的位置。使用默认模板实现起来非常简单。就像通常的登录机制一样,通过谷歌和本地帐户登录。

我认为这是最正确的做事方式,因为域用户可能最终会使用Kerberos / Ntlm(如果需要),并且会降低系统的复杂性。

这是一个WS-Fed示例:Using Claims in your Web App is Easier with the new OWIN Security Components

对于其他内容,您可以使用默认模板创建应用。这个应用程序将以外部身份验证为例。