使用IdentityServer认证的Razor Pages应用如何登录后跳转指定页面
Razor Pages集成IdentityServer OIDC认证成功后重定向指定页面解决方案
错误原因
你对CallbackPath参数的作用存在误解,这是报错的核心原因:
CallbackPath是OIDC认证中间件内置的回调处理端点,仅用于接收IdentityServer返回的授权码、兑换令牌、写入登录Cookie,全程由中间件自动处理,不需要自行实现对应接口CallbackPath的类型是PathString,仅对应URL的路径部分,不支持携带查询参数,所以传入带?的路径会被自动编码,导致身份提供方校验回调地址不匹配,返回无效URI错误,不要修改这个参数,保留默认的/signin-oidc即可
解决方案
方案1:登录时指定跳转地址(灵活可控,推荐)
直接在发起认证挑战的OnPostLogin方法中,传入AuthenticationProperties指定跳转路径即可:
public IActionResult OnPostLogin() { var authProperties = new AuthenticationProperties { // 此处填写你要跳转的目标路径,主页填"/"即可,也可指定为"/Home"等自定义路径 RedirectUri = "/" }; return Challenge(authProperties); }
方案2:全局配置默认跳转地址
如果所有场景下认证成功后都需要跳转到固定页面,可以在OIDC配置中添加事件处理,全局指定默认跳转路径:
修改Startup.cs中AddOpenIdConnect的配置如下:
.AddOpenIdConnect("oidc", options => { options.Authority = StringResources.Authority; options.ClientId = StringResources.ClientId; options.ClientSecret = StringResources.ClientSecret; options.ResponseType = "code"; options.ResponseMode = "query"; options.SaveTokens = true; // 新增事件配置 options.Events = new OpenIdConnectEvents { OnTicketReceived = context => { // 未指定跳转地址时,默认跳转到主页 if (string.IsNullOrEmpty(context.ReturnUri)) { context.ReturnUri = "/"; } return Task.CompletedTask; } }; });
内容的提问来源于stack exchange,提问作者pampua84
相关产品推荐
相关产品推荐

