代码之家  ›  专栏  ›  技术社区  ›  nathanchere Jitendra Vyas

ASP.NET MVC建议的带有会话令牌的URL路由

  •  0
  • nathanchere Jitendra Vyas  · 技术社区  · 14 年前

    我正在尝试实现一个与另一个站点交互的小型ASP.NET MVC站点。简而言之,主站点和卫星站点之间的会话通过URL中的令牌进行管理。我可以指定url格式,但不能删除将会话令牌作为url的一部分提交的要求。

    我在想如何设置路线,我在这里有一些想法。我不能决定哪一个是最好的,或者是否有更好的方法。我的主要想法是:

    routes.MapRoute("Main", "{controller}/{action}/{id}/{token}");
    

    提供如下URL http://mysite.com/Products/Detail/5/5f1c8bbf-d4f3-41f5-ac5f-48f5644a6d0f PRO:大多数与现有MVC约定保持站点无关性 Con:当支持ID和Action的默认值时,会给路由增加复杂性。

    routes.MapRoute("Main", "{token}/{controller}/{action}/{id}/");
    

    提供如下URL http://mysite.com/5f1c8bbf-d4f3-41f5-ac5f-48f5644a6d0f/Products/Detail/5 Pro:简化路由-仍然可以根据标准MVC约定应用操作/id默认值 反对:非常“非网络化”的网址。在转到表中的下一个路由之前,要求regex验证第一个变量是否是有效的GUID/令牌。

    另一种可能是,通过如下课程:

    http://mysite.com/Home/Index?session=5f1c8bbf-d4f3-41f5-ac5f-48f5644a6d0f
    

    与此相关的问题是,我有一个从控制器派生的基类,所有其他安全页都要经过这个基类。SecureController类重写Execute()并检查从URL获取的令牌的有效性。这两种方法(GET和routing)似乎都很容易在controller Execute()函数中获取令牌,但是GET方法感觉有点俗气,而routing方法感觉由于缺乏更好的解释,破坏了MVC路由设计的优雅。

    有没有其他人也遇到过类似的问题,有什么特别的成功或困难要分享?

    1 回复  |  直到 11 年前
        1
  •  2
  •   mookid8000    14 年前

    不管你怎么做,你的网址都会被这个标记弄得乱七八糟。

    我也不得不在ASP.NET MVC应用程序中处理这种单点登录功能,但我采用了一种稍微不同且简单得多的方法:我创建了一个 GatewayController 用一个 SignOn 将会话令牌和URL作为参数的操作。

    那么这个 签名 操作将只检查会话令牌的有效性,然后将用户登录到我的站点,重定向到提供的URL。从那时起,不再需要会话令牌,因为从那时起的身份验证将基于cookie。

    它可能不完全适用于您的情况,这取决于您的要求。如果您需要在某个地方持续检查会话令牌的有效性,那么您只需执行与我相同的操作,然后将会话令牌存储在用户的会话数据中,从而允许您在每个请求中检查令牌。