You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:30:05