我正在尝试从使用 cookie 身份验证的 Angular(版本 7)访问 ASP.NET Core (1.1.2) WebAPI。Angular 应用程序的后端使用 ASP.NET Core 2.1.1 和 JWT 令牌身份验证。我是否需要返回 cookie 作为响应,如果需要,如何返回?以及如何从 Angular 访问/存储该 cookie?这两个应用程序当前都托管在 localhost 下。
如果cookie是通过手动登录设置的(使用我正在尝试访问的WebAPI的角度应用程序的登录页面)一切正常。来自 Angular 应用程序的登录是通过 Razor HTTP 表单进行的,该表单生成__RequestVerificationToken
. 如果我将src
属性 设置<iframe>
为 WebAPI 登录请求,也可以使用。然后登录也可以正常工作。
但是,如果我尝试直接从 Angular 应用程序(带有登录数据的 GET 请求)执行登录过程,登录过程本身会运行,但登录似乎不起作用,因为没有设置 cookie。
来自 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 方法。