Active directory 我可以使用AsNetIdentity和ActiveDirectory吗?

Active directory 我可以使用AsNetIdentity和ActiveDirectory吗?,active-directory,asp.net-identity,owin,Active Directory,Asp.net Identity,Owin,我一直在查看使用Asp.Net身份和各种提供商使用facebook、twitter等提供身份验证的示例 我有一个MVC6解决方案,目前正在使用VS2015 RC开发。它将部署到一个有组织的IIS。AD主要用于对用户进行身份验证,大多数用户通过域进行身份验证,无论是在本地网络内还是远程 但是,有些用户可能希望通过internet访问系统,而不需要域帐户。或者这些用户,用户将注册,管理员将批准帐户,并在应用程序数据库中本地分配角色和权限 项目团队正在请求本地网络上的用户或域上经过身份验证的用户不需要

我一直在查看使用Asp.Net身份和各种提供商使用facebook、twitter等提供身份验证的示例

我有一个MVC6解决方案,目前正在使用VS2015 RC开发。它将部署到一个有组织的IIS。AD主要用于对用户进行身份验证,大多数用户通过域进行身份验证,无论是在本地网络内还是远程

但是,有些用户可能希望通过internet访问系统,而不需要域帐户。或者这些用户,用户将注册,管理员将批准帐户,并在应用程序数据库中本地分配角色和权限

项目团队正在请求本地网络上的用户或域上经过身份验证的用户不需要登录

广告正在使用中,但据我所知,不是ADF

这可能吗?我相信我需要的是一个OWIN的广告提供商,但微软的似乎与ADFS或AAD的工作


谢谢。

您完全可以为通过internet注册的用户使用Asp.Net标识

您也可以使用Asp.Net Identity使用下面的nuget软件包登录广告用户,但windows用户信息(仅用户名、电子邮件)需要存储在您的应用程序数据库中

实现此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;
    }
public异步任务WindowsLoginAsync(字符串用户名、字符串密码、bool ispersist)
{
var信号状态=信号状态故障;
使用(var context=newprincipalcontext(ContextType.Domain,))
{
var valid=context.ValidateCredentials(用户名、密码);
如果(有效)
{
UserPrincipal UserPrincipal=UserPrincipal.FindByIdentity(上下文,用户名);
if(userPrincipal!=null)
{
var loginInfo=新的外部loginInfo
{
Login=new UserLoginInfo(“Windows”,userPrincipal.Sid.ToString())
};
signInStatus=等待外部SignInAsync(登录信息,isPersistent);
返回信号状态;
}
}
}
返回信号状态;
}
这将基本上为windows和web用户使用cookie身份验证。 用户通过身份验证后,您需要在数据库中添加windows用户,并在IdentityUserLogin表中添加一条记录,LoginProvider为“windows”,ProviderKey为userPrincipal.Sid,然后调用SignInManager.SignInAsync登录用户

使用这种方法,我相信windows用户也可以通过internet登录,这可能是您的组织不喜欢的


希望这有帮助

多谢各位。我在本周早些时候找到了Mohammad的解决方案,经过一些调整,我已经制作了一个解决方案,它以这种方式登录AD用户,并使用repository模式与AspNet身份数据结构分离。它工作得很好。谢谢你的回复。