首页 > 解决方案 > Asp core 2.2 多重认证

问题描述

两个身份验证方案如何JWT同时运行?如果其中一个无效,则整个请求应被视为未经授权。否则,所有声明应合并到单个ClaimsIdentity. 我在启动中有以下配置:

services.AddAuthentication(opt =>
            {
                opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                opt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(opt =>
            {
                Configuration.GetSection(nameof(JwtBearerOptions)).Bind(opt);
                opt.Validate();
            })
            .AddJwtBearer("CustomBearer", opt =>
        {
            Configuration.GetSection("CustomJwtBearerOptions").Bind(opt);
            opt.TokenValidationParameters.IssuerSigningKey = new SymmetricSecurityKey(key);
            opt.Events = new JwtBearerEvents
            {
                OnMessageReceived = ctx =>
                {
                    if (ctx.Request.Headers.TryGetValue("CustomAuthorization", out StringValues headerValue))
                    {
                        ctx.Token = headerValue.ToString().Substring("Bearer ".Length).Trim();
                    }

                    return Task.CompletedTask;
                }
            };
            opt.Validate();
        });

如果我运行请求并且两个令牌都有效,那么我会得到合并的声明列表(如预期的那样)。但是,如果一个令牌是valid,而另一个是invalid,我仍然会得到200 ok(唯一的区别是这次我只得到了一半的索赔)。那么,如果至少一个令牌无效,我怎样才能获得“未经授权”呢?

PS请不要硬评,我是那个领域的新手。谢谢)

标签: authenticationasp.net-coreauthorization

解决方案


推荐阅读