ASP Core 2.2多重身份验证

时间:2019-01-28 16:45:04

标签: authentication asp.net-core authorization

两个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(唯一的区别是这次我只获得了一半的权利要求)。 那么,如果至少一个令牌无效,如何获得“未授权”?

P.S。拜托,不要刻苦判断,我是那个领域的新手。谢谢)

0 个答案:

没有答案