我一直在查看使用Asp.Net Identity和各种提供商使用facebook,twitter等提供身份验证的示例。
我有一个MVC 6解决方案,目前正在使用VS2015 RC开发。它将部署到组织IIS。 AD主要用于对用户进行身份验证,其中大多数用户通过域进行身份验证,可以在本地网络中进行,也可以远程进行身份验证。
但是,有些用户可能希望通过互联网访问系统,而无需拥有域帐户。或者这些用户,用户将注册,管理员将批准该帐户并在应用程序数据库中本地分配角色和权限。
项目团队要求本地网络上的用户或域上的其他用户不需要登录。
AD正在使用中,但据我所知,并非ADFS。
这甚至可能吗?我相信我需要的是AD的OWIN提供商,但微软似乎可以使用ADFS或AAD。
感谢。
答案 0 :(得分:2)
对于通过互联网注册的用户,您绝对可以使用Asp.Net Identity。
您还可以使用Asp.Net Identity使用以下nuget包登录AD用户,但Windows用户信息(只是用户名,电子邮件)需要存储在您的应用程序数据库中。
https://github.com/MohammadYounes/OWIN-MixedAuth
实现此nuget包后,只需执行此操作即可验证Windows用户。
在IdentityConfig文件的ApplicationSignInManager类中添加此方法,并在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;
}
这基本上会对Windows和Web用户使用cookie身份验证。 用户通过身份验证后,您需要在数据库中添加Windows用户,并在IdentityUserLogin表中添加一条记录,其中LoginProvider为&#34; Windows&#34;和ProviderKey作为userPrincipal.Sid然后调用SignInManager.SignInAsync来登录用户。
使用这种方法我相信Windows用户也可以通过互联网登录,您的组织可能不喜欢。
希望这有帮助!