ASP.NET Core中OpenIddict提示'redirect_uri'无效的问题求助
排查OpenIddict "redirect_uri is not valid" 错误
针对你遇到的问题,以下是几个关键排查点和修复建议:
1. 客户端未显式配置回调路径/RedirectUri
你的客户端代码中没有设置CallbackPath或RedirectUri,OpenIdConnect中间件默认使用/signin-oidc作为回调路径。需要确保:
- 数据库中该客户端的
RedirectUris列表包含完整的回调URL(比如https://localhost:xxxx/signin-oidc,替换xxxx为客户端实际运行的端口) - 或者在客户端配置中显式指定匹配的路径:
.AddOpenIdConnect(options => { // ... 其他配置 // 显式设置回调路径,需与数据库中的RedirectUris完全一致 options.CallbackPath = "/signin-oidc"; // 如果使用绝对URL,直接指定: // options.RedirectUri = "https://localhost:44313/signin-oidc"; })
2. 数据库中RedirectUris的格式不匹配
OpenIddict对redirect_uri的验证是严格完全匹配的,需检查:
- 必须包含完整协议(http/https)、域名、端口、路径,不能只写相对路径
- 大小写敏感,比如
/Signin-Oidc和/signin-oidc会被视为不同路径 - 无多余斜杠或拼写错误,比如
https://localhost:44313//signin-oidc(多了一个斜杠)会验证失败
3. 确认客户端实体的RedirectUris数据正确存储
检查AuthDbContext中OpenIddict客户端实体的配置,确保RedirectUris是客户端的导航属性,且数据已正确写入数据库(比如通过种子数据或后台管理界面添加的redirect_uri确实关联到了对应ClientId)。
4. 检查实际请求中的redirect_uri参数
使用浏览器开发者工具(Network面板)查看授权请求(/connect/authorize)中的redirect_uri参数,确认实际发送的URL与数据库中存储的完全一致,比如是否存在端口不一致、协议不匹配(http vs https)的情况。
额外注意:PKCE配置
虽然服务端启用了RequireProofKeyForCodeExchange(),但这不会直接导致redirect_uri错误,不过确保客户端自动发送了PKCE参数(OpenIdConnect中间件在使用AuthorizationCodeFlow时默认会处理,无需额外配置)。
内容的提问来源于stack exchange,提问作者Nirmal Patel
相关产品推荐
相关产品推荐

