IdentityServer4 登录回调返回404 UserInfo端点未触发问题求助
IdentityServer4回调404问题修复方案
核心原因是OpenID Connect认证中间件未正确处理/signin-central路径的请求,修复步骤如下:
- 确认OIDC方案名与回调路径匹配
你使用的回调路径/signin-central对应OIDC方案名应为central,无需额外修改默认挑战配置,客户端配置示例如下:
触发认证时显式指定方案名即可,无需修改默认配置:比如在Action上标记builder.Services.AddAuthentication(options => { // 保持原有默认配置不变,无需调整DefaultChallengeScheme options.DefaultScheme = "Cookies"; }) .AddCookie("Cookies") .AddOpenIdConnect("central", options => { options.Authority = "你的IdentityServer服务端地址"; options.ClientId = "你在数据库中配置的客户端ID"; options.ClientSecret = "你在数据库中配置的客户端密钥"; options.ResponseType = "code"; options.SaveTokens = true; // 若OIDC方案名不是central,需手动指定回调路径 // options.CallbackPath = "/signin-central"; options.GetClaimsFromUserInfoEndpoint = true; options.Scope.Add("openid"); options.Scope.Add("profile"); // 添加你需要的其他自定义scope });[Authorize(AuthenticationSchemes = "central")],或返回return Challenge("central");。 - 确认服务端数据库回调地址完全匹配
回调地址大小写敏感,必须与客户端请求地址完全一致
检查服务端数据库ClientRedirectUris表中对应客户端的回调地址,必须完全等于https://localhost:44384/signin-central,不允许有多余斜杠、端口或协议不匹配的情况。 - 确认客户端中间件顺序正确
认证中间件必须放在路由之后、授权之前、端点映射之前,顺序错误会导致认证请求被路由系统直接拦截返回404,正确配置示例:app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.MapRazorPages(); - UserInfo端点未触发说明
该逻辑在OIDC中间件完成code换token流程后自动执行,回调404问题修复后,该问题会同步解决。
内容的提问来源于stack exchange,提问作者Pieterjan
相关产品推荐
相关产品推荐

