asp net core 3.1角Windows身份验证所需的用户名和密码

问题描述

我正在使用带角度的asp net core 3.1,我想将Windows身份验证和JWT结合使用,以便在路由和授权控制器时可以在角度激活,但是在我将令牌从拦截器传递到控制器时始终需要Windows用户名和密码>

request.clone({ headers: request.headers.set('Authorization','Bearer ' + user.token) });

我的launchSettings.json更改为以下

"windowsAuthentication": true,"anonymousAuthentication": false,

将以下代码添加到启动ConfigureConfigs

var appSettingsSection = Configuration.GetSection("AppSettings");
            services.Configure<AppSettings>(appSettingsSection);

            // configure jwt authentication
            var appSettings = appSettingsSection.Get<AppSettings>();
            var key = Encoding.ASCII.GetBytes(appSettings.Secret);
            services.AddAuthentication(x =>
            {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(x =>
            {
                x.RequireHttpsMetadata = false;
                x.SaveToken = true;
                x.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,IssuerSigningKey = new SymmetricSecurityKey(key),ValidateIssuer = false,ValidateAudience = false
                };
            });

将以下代码添加到启动配置

app.UseAuthentication();
app.UseAuthorization();

解决方法

如果要在IIS上托管应用程序,则几乎无法将Windows和jwt令牌认证结合在一起。 JWT和Windows身份验证都利用Http Request Header中的Authorization标头,但是IIS首先接管它,当您的请求是JWT请求时,您发送的Authorization标头就是这样

Authorization: Bearer {jwtcontent}

然后iis Windows身份验证模块接管了您的请求,发现它无法识别您的Authorization标头,因此它以401和类似于(协商)的Authorization标头来响应您的请求

Authorization: Negotiate YIIg8gYGKwY[...]hdN7Z6yDNBuU=

或(对于NTLM)

Authorization: NTLM TlRMTVN[...]ADw==

您的浏览器收到此响应,发现服务器正在寻找Windows凭据,因此它弹出一个窗口,要求您输入用户名和密码

所有这些都由IIS和浏览器处理,甚至都没有转到您的应用程序代码中。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...