[英]Authentication windows/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
};
});
并在configure方法中:
app.UseCors("CorsPolicy");
app.UseAuthentication();
app.UseMvc();
我正在通过Angular 7 SPA应用程序使用.net核心API,并调用了我的API方法:
this.http.get<User>(path + 'api/' + 'users', { withCredentials: true })
现在,当我第一次访问角度应用程序时,API调用将失败,并在日志中显示401错误,但是在网络选项卡上,它的状态显示为(失败),但是,如果我只是重新加载该应用程序,它将可以正常工作。 然后会随机发生此错误,并且如果我尝试以隐身模式访问该应用程序,则只能再次重现此错误。
仅当匿名和Windows身份验证设置为true的Windows Web服务器上的已部署应用程序上才可以重现此问题。
我没有对program.cs进行任何更改,并且它是.net core 2.2的默认配置。
我在Google上进行了很多搜索,尝试了所有可用的建议,但均无用。
还有其他需要看的地方吗?
您必须将带有标头的令牌发送到asp.net核心控制器,以便服务器知道您是谁。
将令牌存储在localStorage中并追加到标头中
更新:
尝试像这样更新您的代码,以查看是否有效
this.http.get<User>(path + 'api/' + 'users')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.