2

我正在尝试从使用 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 方法。

4

0 回答 0