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