我需要实现使用域用户/密码对用户进行身份验证,如果他们在域控制器中,但应用程序也应该可供其他用户使用,谁应该使用自己的用户名/密码进行身份验证;这应存储在应用程序数据库中,并根据数据库检查其用户名/密码。
到目前为止,我开始使用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);
}
}
感谢任何提示!
答案 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
对于其他内容,您可以使用默认模板创建应用。这个应用程序将以外部身份验证为例。