我可以使用ASPNetIdentity和ActiveDirectory吗?

时间:2015-05-12 12:47:24

标签: active-directory asp.net-identity owin

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

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

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

项目团队要求本地网络上的用户或域上的其他用户不需要登录。

AD正在使用中,但据我所知,并非ADFS。

这甚至可能吗?我相信我需要的是AD的OWIN提供商,但微软似乎可以使用ADFS或AAD。

感谢。

1 个答案:

答案 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用户也可以通过互联网登录,您的组织可能不喜欢。

希望这有帮助!