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

ASP.NET Core MVC如何将未认证用户重定向至外部SSO站点?

解决ASP.NET Core MVC重定向至外部SSO站点的问题

因为LoginPath要求必须是本地路径(以"/"开头),不能直接设置为外部URL,所以可以通过两种方式实现跳转至外部SSO站点:

方法一:本地Login Action中转

1. 配置认证的LoginPath为本地路径

修改认证配置,将LoginPath设为本地路由:

using Microsoft.AspNetCore.Authentication.Cookies;

builder.Services
    .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options => 
    {
        options.LoginPath = "/Account/Login"; // 本地中转路径
        // 补充SSO共享Cookie的必要配置,比如:
        // options.Cookie.Domain = ".company.com"; // 跨子域名共享Cookie
        // options.Cookie.Name = "SharedAuthCookie"; // 统一Cookie名称
    });

2. 创建中转Login Action

在AccountController中添加Action,负责重定向到SSO站点并携带返回URL:

public class AccountController : Controller
{
    public IActionResult Login(string returnUrl)
    {
        // 验证返回URL的安全性,防止开放重定向攻击
        if (!Url.IsLocalUrl(returnUrl))
        {
            returnUrl = "/"; // 设为站点默认首页
        }

        // 构造SSO登录地址,转义返回URL避免编码问题
        var ssoLoginUrl = $"https://sso.company.com/account/login?returnUrl={Uri.EscapeDataString(returnUrl)}";
        return Redirect(ssoLoginUrl);
    }
}

当未认证用户访问需要授权的页面时,会先跳转到本地/Account/Login,再自动重定向到SSO登录页,同时携带原请求的返回地址。

方法二:自定义AuthenticationEvents事件

无需额外创建Controller Action,直接在认证配置中通过OnRedirectToLogin事件修改重定向地址:

using Microsoft.AspNetCore.Authentication.Cookies;

builder.Services
    .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options => 
    {
        options.Events = new CookieAuthenticationEvents
        {
            OnRedirectToLogin = context =>
            {
                string returnUrl = context.RedirectUri;
                // 验证返回URL的合法性
                if (!context.Request.IsLocalUrl(returnUrl))
                {
                    returnUrl = "/";
                }

                // 构造SSO登录地址并执行重定向
                var ssoLoginUrl = $"https://sso.company.com/account/login?returnUrl={Uri.EscapeDataString(returnUrl)}";
                context.Response.Redirect(ssoLoginUrl);
                return Task.CompletedTask;
            }
        };

        // 补充SSO共享Cookie的配置
        // options.Cookie.Domain = ".company.com";
        // options.Cookie.Name = "SharedAuthCookie";
    });

关键注意事项

  • 共享Cookie配置:确保应用站点和SSO站点使用相同的Cookie名称、域名,并且数据保护配置一致(比如共享密钥存储),这样登录后的Cookie才能在多个站点间生效。
  • 返回URL安全:必须验证返回URL是否属于当前站点,避免恶意跳转风险,上述两种方法中都加入了安全验证逻辑。

内容的提问来源于stack exchange,提问作者PedroAsking

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:07:36