對於通過互聯網註冊的用戶,您絕對可以使用Asp.Net Identity。
您也可以使用Asp.Net Identity使用以下nuget包登錄AD用戶,但Windows用戶信息(只是用戶名,電子郵件)將需要存儲在您的應用程序數據庫中。
https://github.com/MohammadYounes/OWIN-MixedAuth
後您實現這個NuGet包,只是這樣做對Windows用戶進行身份驗證。
在ApplicationSignInManager類添加這個方法在IdentityConfig文件,如果Windows用戶在登錄調用此方法。
public async Task<SignInStatus> WindowsLoginAsync(string userName, string password, bool isPersistent)
{
var signInStatus = SignInStatus.Failure;
using (var context = new PrincipalContext(ContextType.Domain, <your_domain_name>))
{
var valid = context.ValidateCredentials(userName, password);
if (valid)
{
UserPrincipal userPrincipal = UserPrincipal.FindByIdentity(context, userName);
if (userPrincipal != null)
{
var loginInfo = new ExternalLoginInfo
{
Login = new UserLoginInfo("Windows", userPrincipal.Sid.ToString())
};
signInStatus = await ExternalSignInAsync(loginInfo, isPersistent);
return signInStatus;
}
}
}
return signInStatus;
}
這基本上會使用Cookie身份驗證的Windows和Web用戶的一致好評。 用戶通過身份驗證後,您需要在數據庫中添加windows用戶,並在IdentityUserLogin表中添加一個記錄,將LoginProvider添加爲「Windows」,將ProviderKey添加爲userPrincipal.Sid,然後調用SignInManager.SignInAsync登錄用戶。
使用這種方法,我相信Windows用戶也可以通過互聯網登錄,您的組織可能不喜歡。
希望這會有所幫助!
非常感謝。我在本週早些時候發現了Mohammad的解決方案,並進行了一些調整,我製作了一種解決方案,以這種方式登錄AD用戶,並使用存儲庫模式與AspNet Identity Data結構分離。它工作得很好。感謝回覆。 – user1654348