Как перенаправить на страницу обратного вызова клиента после успешной аутентификации через Identityserver4? - PullRequest
0 голосов
/ 25 апреля 2020

Я создаю сервер входа в систему, используя Identityserver4. Я использую ASP. net core 3.1 для функциональности и angular 9 проект для обслуживания stati c файлов для экранов входа / регистрации. Проект angular обслуживается из папки wwwroot проекта .netcore.

Мой поток выглядит так

  1. javascript клиент вызывает OID C менеджер пользователя Метод signInRedirect () со следующими конфигурациями enter image description here
  2. Отправляет вызов моему методу входа в систему для отображения компонента входа в систему angular. Как только пользователь вводит учетные данные, на мой метод входа в систему отправляется второй вызов return this.http.post('Account/Login', {UserName, Password, ReturnUrl}, {headers, responseType:'text'});
  3. При успешном входе в систему я return Redirect(model.returnUrl);

    [HttpGet]
    public IActionResult Login(string returnUrl)
    {
        return Redirect("/login?ReturnUrl=" + WebUtility.UrlEncode(returnUrl));
    }
    
    [HttpPost]
    public IActionResult Login([FromBody]LoginViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = _userManager.FindByNameAsync(model.UserName).Result;
    
            var result = _signInManager.PasswordSignInAsync(model.UserName, model.Password, false, false).Result;
    
            if(result.Succeeded)
            {
                return Redirect(model.ReturnUrl);
            }
            return Ok(new Error { ErrorMessage = "Invalid credentials" });
        }
    
        return Ok(new Error { ErrorMessage = "Some error" });
    }
    
  4. На моей вкладке сети я вижу, что возвращаемый URL, который является вызовом конечной точки авторизации IdentityServer /connect/authorize/callback, выполнен успешно. enter image description here

Он также сделал второй вызов фактическому клиенту javascript в точке 1 с успешной аутентификацией. enter image description here

Однако здесь возникает проблема. Этот запрос возвращает HTML в виде строки обратного вызова клиентов JS. html вместо фактического перенаправления на этот URL (http://localhost: 5003 / callback. html) enter image description here

У меня даже нет способа получить доступ к URL-адресу возвращенного HTML, в противном случае я бы сделал window.location.href. Как мне захватить URL страницы обратного вызова в angular и перенаправить на нее?

1 Ответ

0 голосов
/ 25 апреля 2020

Мне понадобится еще несколько деталей, чтобы исправить эту конкретную ситуацию. Тем не менее, я хотел предложить свой опыт в форме объяснения того, как это должно работать. У меня есть NPM библиотека imng-auth0-oid c, которая делает именно эту вещь, за исключением того, что она использует NGRX.

Ваш обратный вызов. html должна быть страницей c (не- Angular) HTML. Вы можете найти копию здесь callback. html. Цель этой страницы - получить ответ OAUTH2 и сохранить токен в localStorage, а затем перенаправить ответ в ваше приложение Angular. После загрузки приложения у вас будет доступ к вашему токену, ожидающему в localStorage.

-Isaa c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...