Добавьте параметр токена ко всем URL-адресам внутри сайта asp.net mvc 2 - PullRequest
1 голос
/ 13 декабря 2011

Я интегрировал некоторые страницы, написанные на ASP.NET MVC 2, в классическое веб-приложение.Все работает хорошо, кроме системы аутентификации.

Система аутентификации использует какой-то токен, добавленный к URL-адресу, например:

/Account/Profil/Details.aspx?AUTHID=2ddc098a-cf0b-fd81-afb7-d41f35010b9f

Когда я достигаю своих страниц asv.net mvc (все эти страницы должны) они должны включать этот параметр AUTHID.

Я использую основной элемент управления Webform для защиты страниц, и этот элемент управления проверяет токен AUTHID в URL-адресе.Итак, в основном мой маршрут должен включать

?AUTHID=2ddc098a-cf0b-fd81-afb7-d41f35010b9f

Какой лучший и умный способ сделать это?Я не хочу передавать параметр AUTHID вручную во всех действиях контроллера.Спасибо за вашу помощь.

Ответы [ 3 ]

2 голосов
/ 22 октября 2013

Вы можете решить свою проблему, расширив механизм маршрутизации ASP.NET.Просто создайте собственный маршрут и переопределите функцию GetVirtualPath.

public class TokenizedRoute : Route
{
  public TokenizedRoute(string url, IRouteHandler routeHandler) : base(url, routeHandler)
  {
  }

  public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
  {
    string tokenValue = "your token value";
    values.Add("AUTHID", tokenValue);

    return base.GetVirtualPath(requestContext, values);
  }
}

Подробнее см. в моем блоге .

0 голосов
/ 13 декабря 2011

Вы можете использовать решение jQuery для добавления токена в строку запроса всех ссылок:

$("a").each(function (index, link)
{
    $(link).attr("href", $(link).attr("href") + "?AUTHID=" + token);
});

Но я согласен с dknaack, я бы сказал, что вам следует пересмотреть свою логику аутентификации, если это вообще возможно.

0 голосов
/ 13 декабря 2011

Вы можете сохранить AuthId в объекте Session и создать собственный атрибут Authorize.

Атрибут

public class CustomAuthorize : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        // your custom logic depending on Session["AuthId"]
        return httpContext.Session["AuthId"] != null;
    }
}

Контроллер

public class MyController : Controller
{
    [CustomAuthorize]
    public ActionResult MyActionMethod()
    {
        return View();
    }
}

надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...