如何从Angular访问ASP.NET Core WebAPI(使用cookie身份验证)

时间:2019-04-08 12:40:15

标签: angular asp.net-core jwt asp.net-core-webapi cookie-authentication

我正在尝试从使用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应用程序的登录页面),则一切正常。从angular应用程序登录是通过Razor HTTP表单进行的,该表单为__RequestVerificationToken生成输入。如果我将src的{​​{1}}属性设置为WebAPI登录请求,那么也可以使用。然后登录也可以正常工作。

但是,如果我尝试直接从有角度的应用程序(带有登录数据的GET请求)中执行登录过程,则登录过程本身会运行,但登录似乎无法正常进行,因为未设置cookie。

来自Angular的请求

<iframe>

这是请求网址的样子:

loginToVtsWebConfig(loginUrl: string): Observable<HttpResponse<any>>  {
    return this.http.get<any>(loginUrl, { observe: 'response' });
}

需要访问的WebAPI登录:

http://localhost:65204/SilentLogin?loginData=g7NfYz4%2fI5bbfPWEdsXoGYtcU8cpGprHaVr2c5m3H81nj6j4gE0YrxwmAyn8c%2ba1YLY55CwkKWP55gKict5J4g%3d%3d

登录:

[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);
}

我想要实现的是从角度登录WebAPI(并存储cookie),然后再访问任何WebAPI方法。

0 个答案:

没有答案