繁体   English   中英

带有.net core和angular 7的身份验证窗口/ JWT

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM