使用OpenId Connect与Azure AD然后模拟现有的身份用户

时间:2017-06-13 10:36:37

标签: c# azure model-view-controller asp.net-identity

我正在将Azure AD身份验证添加到现有的MVC应用程序中,在该应用程序中,它使用OWIN Identity来验证来自SQL数据库的用户。

数据库用户在复杂的业务中使用特定的规则来管理应用程序的某些部分。

我已经使用Azure实现了OpenId Connect并且能够登录但是我需要使用已经存在的身份映射AD身份验证用户然后模拟此身份以使用...登录。

一旦AD身份验证成功,我将此控制器重定向到:

现在应用程序确实重定向,但身份仍然是来自AD的身份而不是身份身份。

这段代码有什么问题?我该如何解决?

if (Request.IsAuthenticated)
            {
                //The AD Name Identity is the user email
                var email = User.Identity.Name;

                //Get the user from Identity Provider
                var user = UserManager.Users.FirstOrDefault(t => t.Email == email);

                if(user!= null)
                {
                    //Sign In and Authenticate User
                    var identity = UserManager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
                    var authenticationManager = HttpContext.GetOwinContext().Authentication;

                    authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = true }, identity);

                    var authenticationOptions = new CookieAuthenticationOptions
                    {
                        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie
                    };

                    var app = HttpContext.GetOwinContext().Get<AppBuilderProvider>().Get();
                    app.UseCookieAuthentication(authenticationOptions);

                    return RedirectToAction("Index", "Dashboard");
                }

                return RedirectToAction("Index", "Dashboard");
            }

1 个答案:

答案 0 :(得分:0)

如果您尝试将AD帐户与本地帐户关联或链接,请查看新网络项目中的默认ASP.net标识代码。它使用本地帐户和任意数量的外部帐户来跟踪和管理用户。如果没有为您解决问题,这应该让您朝着正确的方向前进。

但是,如果您要模拟已登录的其他用户(例如,用于调试),则可以执行该操作。

这是一种方式:当您使用外部提供程序进行身份验证时,用户将被重定向回您的控制器(通常在AccountController中称为外部登录或其他操作)。

默认情况下,此操作会向用户签署来自外部提供商的声明信息。

此时你可以选择实现你想要的模仿方式。&#34;

•您可以允许用户根据权限通过将其注销并以所选用户身份登录来模拟其他用户。 •您可以将模拟用户标识存储为排序的会话变量,并以用户身份检查(如果实际用户不存在则返回实际用户)

如何实施假冒取决于你。