Аутентификация / авторизация в ASP. NET Core с использованием страницы Enterprise SingleSignon и Microsoft SignInManager - PullRequest
0 голосов
/ 06 августа 2020

В настоящее время я работаю над проблемой аутентификации в одном из моих приложений ASP. NET Core (3.0).

Чтобы дать некоторую справочную информацию, мы должны использовать корпоративную страницу единого входа для аутентифицировать пользователей. Как только пользователь прошел аутентификацию, он перенаправляется обратно в наше приложение вместе с именем пользователя в HTTP-заголовке под названием «SM_USER». Затем, используя эту информацию, мы загружаем соответствующую информацию о претензиях из БД с помощью Microsoft SignInManger. Приложение работает нормально, если пользователь обращается к root, но не может получить доступ, если он пытается напрямую перейти на определенную страницу c, например http://website/Controller/Index.

Я подозреваю, что Возможно, мы реализовали это неправильно, поэтому хотели бы знать, как следует реализовать приведенный ниже сценарий?

Наши пользователи сначала проходят аутентификацию с помощью корпоративной страницы входа (единый вход), а затем перенаправляются в наше приложение. информация о пользователе, доступная в заголовках HTTP, и соответствующая информация о заявках доступна в нашей базе данных, которую нам нужно использовать для авторизации (мы хотели использовать Microrosoft SignInManger для их загрузки).

1 Ответ

0 голосов
/ 07 августа 2020

Я обнаружил проблему после ее тщательного исследования, поэтому поделитесь здесь, если она кому-то пригодится.

мы наблюдали всякий раз, когда пользователь пытается получить доступ к странице, если пользователь не аутентифицирован, тогда он перенаправляет страницу входа ( Замечено, что украшение их атрибутом [Authorize] вызывает это), где мы используем эту страницу входа в систему для целей локальной разработки.

поэтому, когда пользователь перенаправляется на страницу входа, и если среда не разрабатывается, то ниже код выполняется в методе Get, который заботится о подписании пользователя и создании UserPrincipal. Затем после этого мы перенаправляем на страницу, запрошенную пользователем.

if (!_signInManager.IsSignedIn(User))
            {
                string userName = HttpContext.Request.Headers["SM_USER"].ToString();
                if (userName.Length > 0)
                {
                    var user = await _userManager.FindByNameAsync(userName);
                    if (user != null)
                    {
                        var claimsPrincipal = await _signInManager.CreateUserPrincipalAsync(user);
                        await _signInManager.Context.SignInAsync(IdentityConstants.ApplicationScheme,
                            claimsPrincipal,
                            new AuthenticationProperties { IsPersistent = true });

                        if (string.IsNullOrEmpty(returnUrl)) //returnUrl is a parameter get passed by the system. 
                        {
                            return RedirectToAction("<Action>", "<Controller>");
                        }
                        else
                        {
                            return Redirect(returnUrl);
                        }
                    }
                }
            }
...