Я пытаюсь получить доступ к ASP.NET Core (1.1.2) WebAPI из Angular (версия 7), который использует проверку подлинности cookie.Бэкэнд для приложения Angular использует аутентификацию ASP.NET Core 2.1.1 и токена JWT.Нужно ли мне возвращать куки в ответ и если да, то как?И как мне получить доступ / сохранить этот файл cookie от Angular?Оба приложения в настоящее время размещены на локальном хосте.
Если файл cookie установлен путем входа в систему вручную (страница входа из углового приложения, использующего WebAPI, который я пытаюсь получить доступ), все работает нормально.Вход в систему из углового приложения происходит через HTTP-форму Razor, которая генерирует данные для __RequestVerificationToken
.Что также работает, если я устанавливаю src
атрибут <iframe>
для запроса входа в WebAPI.Тогда логин тоже работает.
Но если я пытаюсь выполнить процесс входа в систему непосредственно из углового приложения (запрос GET с данными для входа в систему), сам процесс входа проходит, но вход в систему не выполняется.кажется, работает, потому что не было установлено печенье.
Запрос от Angular:
loginToVtsWebConfig(loginUrl: string): Observable<HttpResponse<any>> {
return this.http.get<any>(loginUrl, { observe: 'response' });
}
Вот как выглядит URL запроса:
http://localhost:65204/SilentLogin?loginData=g7NfYz4%2fI5bbfPWEdsXoGYtcU8cpGprHaVr2c5m3H81nj6j4gE0YrxwmAyn8c%2ba1YLY55CwkKWP55gKict5J4g%3d%3d
Вход в WebAPI, к которому необходимо получить доступ:
[HttpGet("SilentLogin")]
public async Task<IActionResult> SilentLogin([FromQuery] string loginData)
{
if (string.IsNullOrEmpty(loginData))
{
return Unauthorized();
}
var loginModel = ExtractModelFromQuery(loginData);
if (loginModel == null)
{
return NotFound();
}
return await Login(loginModel, null);
}
Войдите в систему:
HttpContext.Authentication.SignInAsync(CookieIdentifier, new ClaimsPrincipal(claimsIdentity), new AuthenticationProperties() { IsPersistent = true, ExpiresUtc = DateTimeOffset.UtcNow.AddDays(1) }).Wait();
Я пытаюсь достичь входа в WebAPI с углового (и сохранить cookie) и впоследствии обращаться к любым методам WebAPI.