MVC门户网站建筑注意事项,认证&内容

时间:2015-12-16 15:32:37

标签: asp.net iis asp.net-identity asp.net-core asp.net-core-mvc

情景:

  • IIS ARR前端正在将负载分配给 n。运行MVC 6的IIS应用服务器。
  • 多个域指向ARR
  • 使用MS身份验证
  • 所有应用服务器都会针对相同的应用程序提供轻微的品牌/内容更改,具体取决于用于访问网站的域。我们将每个变体称为“门户”。

您能验证以下假设吗?

  • 对于此方案,身份验证票证似乎是开箱即用的。

    具体来说,如果用户登录“www.foo.com”下的网站,然后使用“www.bar.com”访问同一网站,他们将无法在bar.com上进行身份验证(即使他们技术上是在相同或不同的App服务器上命中相同的应用程序)。

    这有什么问题吗?

你能检查这个架构决定吗?

  • 我们在MVC 6中间件组件中链接以检查每个请求的域,以在HTTP上下文的Request对象中设置“portalID”变量。该组件只是根据Hashtable检查域名,并为请求设置适当的门户ID。
  • 使用部分视图和新视图组件呈现变量内容。所有可变内容(如标题图像引用,文本等)都存储在数据库中,IMemoryCached由portalID缓存和更改

    • 当用户注册时,注册方法会使用他们的PortalID标记用户(我们只有一个用户数据库用于所有“门户网站”,但希望保持用户分段)。

考虑到新的MVC 6框架,这是实现这种情况的合理方式吗?

你能想到这个实现的任何问题吗?

1 个答案:

答案 0 :(得分:1)

关于身份验证,身份验证票证(基于cookie的身份验证)是按域名进行的,因此当用户只登录Portal B时,您访问门户网站A时没有任何问题。您可以实现,以便可以跨多个子域进行身份验证,但这是一个非默认方案,仅适用于子域,而不适用于完全不同的域。事实上,通过登录您的一个门户并在您的cookie集合中查看身份验证票证来证明这一点。然后转到另一个域/门户并查看您的cookie集合:您的身份验证cookie不会存在(适用于任何cookie)。

我已经多次实现这样的场景没有问题(一个应用程序,许多不同的"站点"有缓存/不同的视图/等等)虽然是表单身份验证,但是主体仍然适用。