【发布时间】:2021-05-01 03:50:11
【问题描述】:
这个问题与 .Net Core API 项目上的 JwtBearer 令牌配置有关。
最近我的一位同事将 Identity Server 4 更新为 v4,因此,提供令牌的方式发生了一些重大变化,最重要的是删除了令牌中的 aud(受众)元素(参考: IDS4 docs)。
建议我在 ASP.Net Core API Startup.cs 中配置以下内容,并添加了对令牌标头(ValidTypes 检查)和密钥的额外检查,这些检查已通过先前使用的 '@987654323 进行了测试@' 配置。
services.AddAuthentication(
options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}
)
.AddJwtBearer("Bearer",
options =>
{
options.Authority = "https://<<my_identity_server.com>>";
options.RequireHttpsMetadata = true;
options.TokenValidationParameters = new TokenValidationParameters()
{
ValidateAudience = false,
ValidTypes = new[] { "at+jwt" },
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("<<key/secret>>")),
};
});
如果没有这些 TokenValidationParameters 设置,尤其是“ValidateAudience = false”,我会收到与空受众相关的错误(“受众'空'无效”),因此我有信心这些设置正在被读取并应用于在某种程度上。但是,如果我将 正确 预期的标头类型(“at+jwt”)或我的密钥/秘密值更改为 不正确的值,则不会产生错误,并且 API 会继续返回结果调用它。我还尝试添加许多 TokenValidationParameter 设置,例如 ValidateIssuer 和 ValidIssuer 也不会触发不匹配错误。
我遗漏了什么可能会阻止这些项目被正确测试?
【问题讨论】:
-
ASP.NET Core 因在服务集合和应用程序构建器上调用这些扩展方法时会以各种方式覆盖彼此的配置而出现问题而臭名昭著。听起来您很可能遇到这样的问题,但是如果没有看到您的启动配置,很难知道究竟是什么。顺便说一句,一个已知的“问题”是添加身份(即 AddIdentity() 和 AddDefaultIdentity())会设置授权,因此您必须在这些之后调用自己的 AddAuthentication()。
-
感谢您的评论@Leaky;发展优先事项意味着我一两天都看不到这个,但我很感激你们的 cmets,很快就会回来。
标签: c# asp.net-core jwt identityserver4 bearer-token