我可以使用 ASPNetIdentity 和 ActiveDirectory 吗?

Can I use ASPNetIdentity and ActiveDirectory?

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

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

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

项目团队要求本地网络上的用户或在域上通过其他方式验证的用户不需要登录。

据我所知,正在使用 AD,但未使用 ADFS。

这可能吗?我相信我需要的是用于 AD 的 OWIN 提供程序,但 Microsoft 提供程序似乎可以与 ADFS 或 AAD 一起使用。

谢谢。

您绝对可以为通过 Internet 注册的用户使用 Asp.Net 身份。

您还可以使用 Asp.Net 身份使用以下 nuget 包登录 AD 用户,但是 windows 用户信息(仅用户名、电子邮件)需要存储在您的应用程序数据库。

https://github.com/MohammadYounes/OWIN-MixedAuth

实施此 nuget 包后,只需执行此操作即可对 windows 用户进行身份验证。

在 IdentityConfig 文件的 ApplicationSignInManager class 中添加此方法,如果 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 table 中添加一条记录,其中 LoginProvider 为 "Windows",ProviderKey 为 userPrincipal.Sid 和然后调用 SignInManager.SignInAsync 登录用户。

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

希望对您有所帮助!