3

我有一个使用 ASP MVC 4 的新大项目,将来我需要构建许多包含以下内容的小型 Web 应用程序:

  • 一个横幅(如黑色的谷歌横幅,用于身份验证、通知、搜索……等)
  • 必须访问横幅信息并知道用户是否经过身份验证的主体。

让我解释一下,如果我们看一下:

  • 谷歌播放(子域)
  • 谷歌地图(子域)
  • 谷歌翻译(子域)
  • 谷歌 Gmail(子域)
  • Youtube (不同域)

我们会注意到它的所有子域甚至不同域 (youtube) 的横幅完全相同,并且它们只是更改了内容,如果我已经在 google play 中进行了身份验证,我不需要在 Gmail 中再次进行身份验证或YouTube 。

我想对我的网站做同样的事情:这里有一个用图片解释的链接: http ://www.use.com/ba3e6c12424c7696be7f

我的问题或只需要确认:

1- 是否可以在不同域中托管横幅和网站,但仍不能在每个网站中再次进行身份验证?我正在考虑可能的 YouTube 域和谷歌域。我怎样才能获得相同的体验?

2 - 我认为使用子域很容易,不需要 OAuth 2 进行身份验证,只需普通的 ASP MVC 4 简单成员即可完成这项工作,对吗?

3-假设我选择带有子域的 ASP MVC 4 简单会员资格,如果我想要与谷歌横幅相同的体验,我该如何组织我的项目,这样我就不会在每个项目中都有重复的横幅代码?

      a) 第一个想法是构建横幅,将其放入程序集中并使用 HTML 助手渲染它,这是一个好的选择吗?)

      b) 如果我将每个子域都托管在不同的服务器上,我是否仍然拥有相同的体验?

      c) 我可以选择在 subdomain1 中托管横幅并使用 JavaScript 将其加载到 subdomain 2 中的网站中吗?(我是否还有同样的经历)

4-假设我必须为每个网站提供不同域(而不是子域),我该如何管理架构?我只是需要一些线索。

5-如果我在所有方面都错了,您能否指导我在完全不同的域或不同的子域中获得完全相同的体验并提供优雅的解决方案?

提前谢谢你,对不起我的英语不好(第三语言)。

4

1 回答 1

0

你真的有两个不同的问题。首先,如何在多个项目中包含一些 HTML。这里真的有无数种可能性。如果您的所有网站都在 Visual Studio 中的同一个解决方案中,最简单的方法是简单地选择一个项目来保存横幅的部分视图,然后在您的其他项目中链接到它。您可以通过在解决方案资源管理器中右键单击项目中的某个位置并选择添加 -> 现有项...,在另一个解决方案中找到该文件,但不是“添加”来确认,而是单击它旁边的箭头,展开下拉列表并选择“添加为链接”。

或者,或者如果您的一个或多个站点不在同一个解决方案中或完全使用另一种语言,那么您最好的选择可能是将 HTML 片段保存为平面文件,每个站点都可以访问该文件。然后,您只需从该文件中读取并显示它。

您的第二个问题更复杂:如何共享身份验证。如果所有站点都在同一个域(子域)上,那么您只需在域本身上设置 cookie,所有子域都会收到 cookie 并访问身份验证状态。但是,如果您的站点位于不同的域上,它就会变得更加复杂。您要么必须实现类似 OAuth 的东西,如果所有站点都属于一起,这会很尴尬(即 OAuth 仅用于与第三方进行身份验证,没有人真正使用它来在相关但不同的域之间共享身份验证。)或者,您基本上创建一个为其他站点提供身份验证的服务器。

这是一种复杂的设置,但您已经在 Google 拥有的资产等地方看到了它。当您登录时,它会将您带到accounts.google.com,然后您在登录后被重定向到原始站点。本质上,发生的事情是,从技术上讲,您“登录”的唯一地方是帐户.google.com。如果家庭中的某个站点需要身份验证,它会将您重定向到 accounts.google.com。此时,如果您已经有一个身份验证 cookie,它会被发送,accounts.google.com 会恢复您的身份验证会话,然后它会重定向回原始站点,并带有一些标识您已登录的令牌。进入所有详细信息以及如何实际设置它远远超出了在 StackOverflow 上可以合理完成的范围,但是这是一个非常好的参考和起点。第 1 部分描述了该理论。下一部分将详细介绍如何设置它。

于 2013-08-16T19:51:44.560 回答