Стандарт работает как AuthorizeAttribute, устанавливая код состояния ответа на 401, если запрос не аутентифицирован. Это запускает стандартный ответ модуля аутентификации по умолчанию на неавторизованный запрос. Я предполагаю, что вы используете аутентификацию на основе форм, которая создаст URL-адрес возврата на основе URL-адреса в запросе. В этом случае, вероятно, относительный URL.
Одна вещь, которую вы могли бы сделать, вместо того, чтобы полагаться на встроенное поведение, вы могли бы реализовать SSOAuthorizeAttribute, который расширяет класс AuthorizeAttribute и переопределяет OnAuthorization. Затем вы можете извлечь loginUrl из элемента формы в веб-конфигурации и создать собственный RedirectResult и извлечь returnUrl из свойства HttpContext.Request.Url.AbsoluteUri в параметре AuthorizationContext.
public class SSOAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(
AuthorizationContext filterContext )
{
if (filterContext == null)
{
throw new ArgumentNullException( "filterContext" );
}
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
// get from cached variable from web configuration
string loginUrl = ...
if (filterContext.HttpContext.Request != null)
{
loginUrl += "?ReturnUrl=" + filterContext.HttpContext
.Request
.Url
.AbsoluteUri;
}
filterContext.Result = new RedirectResult( loginUrl );
}
}
}