Asp.net core ASP.NET核心JWT令牌验证在同一来源上失败

Asp.net core ASP.NET核心JWT令牌验证在同一来源上失败,asp.net-core,jwt,asp.net-core-2.2,Asp.net Core,Jwt,Asp.net Core 2.2,我正在用AngularWeb客户端编写一个ASP.NET核心(2.2)应用程序。对于身份验证,我使用JWT令牌验证:“登录”端点发出JWT令牌,然后在Authorization:Bearer xxxxx头中显示 当ASP.NET应用程序和Web客户端独立运行时,即当我在Visual studio中启动ASP.NET应用程序并在不同的端口上使用ng serve运行Web客户端时,一切正常 当我将编译器web客户端复制到wwwroot目录时,JWT令牌验证失败 登录调用仍然成功并返回JWT令牌。但是

我正在用AngularWeb客户端编写一个ASP.NET核心(2.2)应用程序。对于身份验证,我使用JWT令牌验证:“登录”端点发出JWT令牌,然后在
Authorization:Bearer xxxxx
头中显示

当ASP.NET应用程序和Web客户端独立运行时,即当我在Visual studio中启动ASP.NET应用程序并在不同的端口上使用
ng serve
运行Web客户端时,一切正常

当我将编译器web客户端复制到
wwwroot
目录时,JWT令牌验证失败

登录调用仍然成功并返回JWT令牌。但是在
授权
头中使用令牌的下一次调用失败。日志仅给出:

持票人未经身份验证。失败消息:否 SecurityTokenValidator可用于令牌:eyJhbGciOiJIUzI

服务器代码在这两种情况下都是相同的,唯一的更改是客户端
index.html
中的“
标记(因为它是从asp.net应用程序的“webapp”子路径提供的)

从监控网络请求可以看出,头和令牌发送正确。唯一的区别是,当客户端从不同的端口运行时,浏览器发出额外的“选项”请求(我假设是由于CORS,但这部分工作正常,CORS已启用)

设置JWT签名秘密、观众、发行人等,并且在两种情况下都相同


有没有其他JWT令牌验证机制可以解释这种行为?

我也遇到过同样的问题,并发现它与如何将令牌添加到标头有关:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
我注意到,通过这种方式,标记包含“(双引号),因此被拒绝。 我这样做:

client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token.Replace("\"", "")}");
但这并不是最干净的解决方案:(。
希望能有所帮助

我也遇到过同样的问题,并发现这与如何将令牌添加到标头有关:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
我注意到,通过这种方式,标记包含“(双引号),因此被拒绝。 我这样做:

client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token.Replace("\"", "")}");
但这并不是最干净的解决方案:(。
希望有帮助

你能分享一些代码吗?我面临着完全相同的问题你能分享一些代码吗?我面临着完全相同的问题