.NET Core 2.2下Identity Server 4重定向失效问题求助
修复Identity Server 4在ASP.NET Core 2.2中JWKS端点Content-Type不兼容问题
我之前也碰到过一模一样的问题!根源在于ASP.NET Core 2.2版本的Identity Server 4开始严格遵循RFC 7517标准,把JWKS(JSON Web Key Set)端点的响应Content-Type设置为application/jwk-set+json,但你用的Angular OAuth客户端库(比如旧版的angular-oauth2-oidc)可能只预期接收application/json,导致解析失败,直接卡住了登出后的密钥发现流程。
这里有两种可行的修复方案,你可以根据项目情况选:
方案一:临时修改Identity Server的JWKS响应头(快速解决)
通过添加自定义中间件,拦截JWKS端点的响应并强制修改Content-Type为客户端预期的类型:
- 打开Identity Server项目的
Startup.cs文件 - 在
Configure方法里,放在app.UseIdentityServer()之后添加这段代码:
app.Use(async (context, next) => { await next(); // 匹配JWKS端点的路径 if (context.Request.Path.Equals("/.well-known/openid-configuration/jwks", StringComparison.OrdinalIgnoreCase)) { // 强制将Content-Type改为application/json context.Response.ContentType = "application/json"; } });
- 重启Identity Server,用Fiddler或Chrome开发者工具验证JWKS端点的响应头,确认Content-Type已经变成
application/json后,再测试登出流程是否恢复正常。
方案二:升级Angular OAuth客户端库(长期标准方案)
application/jwk-set+json其实是JWKS的官方标准Content-Type,旧版本的客户端库只是没适配这个标准。如果你的项目允许升级依赖,建议直接把Angular OAuth库(比如angular-oauth2-oidc)升到最新稳定版本——新版本已经支持这个标准类型,既能从根源解决兼容性问题,也能避免后续其他潜在的标准适配坑。
验证方法
不管选哪种方案,修复后都可以这么确认:
- 打开Chrome开发者工具的Network标签
- 触发登出流程,找到请求
/.well-known/openid-configuration/jwks的记录 - 查看Response Headers里的Content-Type,确认是
application/json(方案一),或者客户端库能正常解析application/jwk-set+json(方案二)
内容的提问来源于stack exchange,提问作者axelrotter
相关产品推荐
相关产品推荐

