使用子域路由时进行身份验证

时间:2012-03-27 22:02:24

标签: asp.net-mvc-3 forms-authentication multi-tenant

我正在研究我的第二个多租户MVC应用程序。我的第一次没有使用子域名。相反,它使用带有租户(clientportal)标识符的第一个参数的路由。

Route route = new Route("{clientportal}/{controller}/{action}/{id}",
                        new RouteValueDictionary(new
                        {
                            controller = "ClientPortalHome",
                            action = "Index",
                            id = UrlParameter.Optional
                    }), new PortalRouteHandler());

这一次,我需要使用实际的子域名。

  

Client1.mysite.com
  Client2.mysite.com

为实现这一目标,我实现了类似于此的子域路由:

Is it possible to make an ASP.NET MVC route based on a subdomain?

我的问题是这个。处理加载我的用户和验证请求的正确位置在哪里?

在子域路由之前触发Application_AuthenticateRequest。这意味着当AuthenticateRequest正在执行时,我不知道该请求适用于哪个租户。

也许我可以加载用户并在子域路由代码中验证请求,但这有点错误。

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

您应该使用自定义授权过滤器。它在控制器进程的最初阶段被触发,您将获得在ControllerContext中对用户进行身份验证所需的所有信息。