Skoruba IdentityServer4接入MVC客户端出现Invalid Redirect_Uri错误
错误原因
- 回调路径不匹配:MVC项目Startup中OpenIdConnect配置的
CallbackPath为/Home/,但IdentityServer中该客户端配置的允许重定向地址(RedirectUris)仅包含https://localhost:44332/signin-oidc,IdentityServer会严格校验重定向地址完全匹配,校验不通过就会抛出Invalid Redirect_Uri错误。
- 回调路径不匹配:MVC项目Startup中OpenIdConnect配置的
- 登出回调路径不匹配:MVC中配置的
SignedOutCallbackPath为/Home/,和IdentityServer中配置的PostLogoutRedirectUris值https://localhost:44332/signout-callback-oidc不匹配,后续登出操作也会触发同类错误。
- 登出回调路径不匹配:MVC中配置的
- 隐含配置问题:IdentityServer中MVC客户端允许的Scope列表里写的是
PS.webApi,但MVC项目中请求的Scope为PS.WebApi.Read,和已定义的ApiScopeWebApi.Read也不匹配,重定向问题解决后会继续抛出Scope校验错误。
- 隐含配置问题:IdentityServer中MVC客户端允许的Scope列表里写的是
- 额外编译问题:你提供的Startup代码开头多了无效字符
sdfsdf,会直接导致编译失败。
解决方案
- 修正MVC项目OpenIdConnect配置(推荐方案,使用默认回调路径无需额外开发)
删除代码开头的无效字符sdfsdf,修改Startup类中AddOpenIdConnect的回调路径配置:
- 修正MVC项目OpenIdConnect配置(推荐方案,使用默认回调路径无需额外开发)
// 删掉原来错误的CallbackPath、SignedOutCallbackPath配置,替换为以下两行 options.CallbackPath = new PathString("/signin-oidc"); options.SignedOutCallbackPath = new PathString("/signout-callback-oidc");
如果确实需要自定义回调路径为/Home/,则需要修改IdentityServer中MVC客户端的配置,在RedirectUris中添加https://localhost:44332/Home/,PostLogoutRedirectUris中添加https://localhost:44332/Home/,注意路径的末尾斜杠、大小写必须和请求的完全一致。
- 修正Scope配置
修改Identityserverdata.json中MVC客户端的AllowedScopes节点,将错误的PS.webApi替换为实际请求的Scope:
- 修正Scope配置
"AllowedScopes": [ "openid", "email", "profile", "roles", "address", "WebApi.Read" ],
- 生效配置
如果你的IdentityServer已经完成过数据初始化,修改Identityserverdata.json不会自动更新数据库配置,需要进入Skoruba.IdentityServer4.Admin后台(地址为https://localhost:44303),手动找到Mvc_ClientId客户端,同步修改重定向地址、登出重定向地址、允许的Scope三个配置项,保存后重启STS服务和MVC项目即可生效。
- 生效配置
内容的提问来源于stack exchange,提问作者Akbar Parhizkari
相关产品推荐
相关产品推荐

