1
build / build-push (push) Successful in 27s

This commit is contained in:
wanghu
2026-09-04 14:08:50 +08:00
parent 18e10a004f
commit 28b3ab80a2
@@ -247,20 +247,32 @@ namespace YhCore.WebApi.Auth
var referer = ResolveRedirectToReferer()
?? ResolveQueryRedirectToReferer()
?? ResolveReturnUrl();
string redirect;
if (referer != null)
{
redirect = CasHex.IsAllowedRedirectTarget(referer, AllowedHost()) ? referer : "/";
}
else
{
redirect = BuildServiceUrlFromOriginalPath();
redirect = CasHex.IsAllowedRedirectTarget(redirect, AllowedHost()) ? redirect : "/";
}
Response.Redirect(redirect);
// 有显式回跳目标:302 到纯解码地址(不追加 ticket 等任何参数)。
var target = CasHex.IsAllowedRedirectTarget(referer, AllowedHost()) ? referer : "/";
Response.Redirect(target);
return AuthenticateResult.NoResult();
}
// 无显式回跳目标(无 referer 挑战:service=原访问 URL,CAS 原样带 ticket 回调):
// - 根路径回调(如 /?ticket=ST-xxx):Cookie 已写入、Context.User 已同步,直接返回放行管道,
// 由根端点当场渲染登录态页面(200,零重定向)——即"验票登录且不再重定向";
// 刷新/重放该地址时走 Cookie 恢复(票据不再参与),不会重复验票失败 401,杜绝重定向循环。
// - 其余路径回调:仍 302 去掉 ticket 的干净原地址(清理地址栏,防刷新重复验票)。
var cleanUrl = BuildServiceUrlFromOriginalPath();
if (IsRootPath(ResolveOriginalPath()) && CasHex.IsAllowedRedirectTarget(cleanUrl, AllowedHost()))
{
return AuthenticateResult.NoResult();
}
Response.Redirect(CasHex.IsAllowedRedirectTarget(cleanUrl, AllowedHost()) ? cleanUrl : "/");
return AuthenticateResult.NoResult();
}
/// <summary>是否根路径(无 referer 挑战的 service=根地址形态,回调形如 /?ticket=ST-xxx)。</summary>
private static bool IsRootPath(string path)
=> string.IsNullOrEmpty(path) || path == "/";
/// <summary>
/// 解析 ;redirectToReferer= 分号段的回跳目标:优先 PathMatrixSegmentMiddleware 存入 Items 的
/// hex(分号段已从路由路径剥离,回调重建 service 仍用原始路径);未经过该中间件时回退解析当前