authentication - 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请不要硬评,我是那个领域的新手。谢谢)
解决方案
推荐阅读
- python - 无法从网页中获取标题时无法强制脚本尝试几次
- javascript - CubeJS - 根据响应的总测量值计算测量值
- android-emulator - Genymotion 与 Virtualbox 完全卸载并回收硬盘空间
- mongodb - 如何在 MongoDB 项目期间遍历字段的值?
- javascript - 通过ajax请求获取react app并执行
- ios - 仅在调试配置模式下,iOS 应用程序在启动屏幕后关闭/崩溃
- ruby - 有条件地使规范待定
- node.js - 如何从剧作家那里读取文本框值
- android - android 10 BitmapFactory.decodeFile(ImageFilePath) 返回 null
- r - 下载 zip 文件并在 Shiny App 中提取特定文件