【问题标题】:asp net core 3.1 angular windows authentication required username and passwordasp net core 3.1 angular windows 身份验证需要用户名和密码
【发布时间】:2020-08-14 14:24:30
【问题描述】:

我正在使用带有 Angular 的 asp net core 3.1 我想结合 windows 身份验证和 JWT 以便在路由和授权控制器时在 angular 中激活,但在我将令牌从拦截器传递到控制器时总是需要 windows 用户名和密码

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

我的 launchSettings.json 更改为下面

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

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

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();

【问题讨论】:

    标签: angular asp.net-core


    【解决方案1】:

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

    Authorization: Bearer {jwtcontent}
    

    然后iis windows身份验证模块接管您的请求,发现它无法识别您的授权标头,因此它以401和这样的授权标头响应您的请求(协商)

    Authorization: Negotiate YIIg8gYGKwY[...]hdN7Z6yDNBuU=
    

    或(对于 NTLM)

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

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

    所有这些都由 IIS 和浏览器处理,甚至不会进入您的应用程序代码。

    【讨论】:

    • github有项目吗?
    • 你所说的任何项目是什么意思?一个项目结合了windows auth和jwt bearer auth?我们可以使用 kersel 来托管我们的网站,并在每个控制器中指定 [Authorize(scheme={your auth scheme}] 属性以强制您的操作同时使用 jwt 和 windows。请参阅此文档:docs.microsoft.com/en-us/aspnet/core/security/authorization/…
    • 如果有任何已完成的项目,那就太好了
    猜你喜欢
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    相关资源
    最近更新 更多