Я создаю сервер входа в систему, используя Identityserver4. Я использую ASP. net core 3.1 для функциональности и angular 9 проект для обслуживания stati c файлов для экранов входа / регистрации. Проект angular обслуживается из папки wwwroot проекта .netcore.
Мой поток выглядит так
- javascript клиент вызывает OID C менеджер пользователя Метод signInRedirect () со следующими конфигурациями
- Отправляет вызов моему методу входа в систему для отображения компонента входа в систему angular. Как только пользователь вводит учетные данные, на мой метод входа в систему отправляется второй вызов
return this.http.post('Account/Login', {UserName, Password, ReturnUrl}, {headers, responseType:'text'});
При успешном входе в систему я 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" });
}
На моей вкладке сети я вижу, что возвращаемый URL, который является вызовом конечной точки авторизации IdentityServer /connect/authorize/callback
, выполнен успешно.
Он также сделал второй вызов фактическому клиенту javascript в точке 1 с успешной аутентификацией.
Однако здесь возникает проблема. Этот запрос возвращает HTML в виде строки обратного вызова клиентов JS. html вместо фактического перенаправления на этот URL (http://localhost: 5003 / callback. html)
У меня даже нет способа получить доступ к URL-адресу возвращенного HTML, в противном случае я бы сделал window.location.href. Как мне захватить URL страницы обратного вызова в angular и перенаправить на нее?