身份验证窗口/JWT with .net core & angular 7



我已经配置了.net core 2.2启动文件,如下所示:

var key = Encoding.ASCII.GetBytes(AppSettings.Secret);
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = IISDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = 
JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, x =>
{
x.RequireHttpsMetadata = false;
x.SaveToken = true;
x.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(key),
ValidateIssuer = false,
ValidateAudience = false
};
});

在配置方法中:

app.UseCors("CorsPolicy");
app.UseAuthentication();
app.UseMvc();

我通过我的Angular 7 SPA应用程序使用.net核心API,并调用我的API方法:

this.http.get<User>(path + 'api/' + 'users', { withCredentials: true })

现在,当我第一次访问 angular 应用程序时,API 调用失败并在日志中出现 401 错误,但在网络选项卡上它显示状态为(失败(,但是如果我只是重新加载应用程序,它可以工作。然后此错误是随机发生的,如果我尝试以隐身模式访问应用程序,我只能再次重现此错误。

此问题仅在"匿名"和"Windows 身份验证"设置为 true 的 Windows Web 服务器上部署的设备上重现。

我没有做任何与程序相对应的更改.cs它是 .net core 2.2 的默认配置。

我在谷歌上搜索了很多,尝试了所有可用的建议,但没有一个奏效。

还有什么地方需要看吗?

您必须将带有标头的令牌发送到 asp.net 核心控制器,以便服务器知道您是谁。

将令牌存储在本地存储中并附加到标头中

更新:

尝试像这样更新您的代码以查看它是否有效

this.http.get<User>(path + 'api/' + 'users')

最新更新