多个网站,单点登录设计

我有个问题。 我最近做过一些工作的客户有一系列具有不同登录机制的网站。 他希望慢慢迁移到他的网站的单一登录机制(全部用asp.net mvc编写)。

我在这里查看我的选项,所以这里是一个要求列表:

  1. 它必须是安全的(duh)
  2. 它需要支持超出通常名称,地址内容(例如用户的金钱或信用)的额外用户属性
  3. 为了方便起见,它必须提供一个集中的用户管理Web控制台(我知道这将是一个小项目,除了我选择的任何设计解决方案)
  4. 它必须与现有网站集成,而无需重新设计整个产品(我知道这取决于当前的产品实现)。
  5. 它必须处理用户在注册时发送的电子邮件(以便他激活他的帐户)
  6. 当他点击电子邮件中的激活我链接时,它必须处理激活用户(我知道5和6需要某种forms的电子邮件模板系统来支持每个应用程序的不同电子邮件)

我正在考虑创建一个与表单身份validation一起工作的库,它可以公开所需的任何方法(例如登录,注销,激活等)以及通过电子邮件,注册处理等实现激活的小型宁静服务。

考虑到已经遗漏了许多东西以使这个问题简短而重要,这听起来像是一个好的设计吗?

但这看起来像一个非常普遍的问题,所以我可以使用任何现有的项目吗?

谢谢阅读。

要实现的基本要点是,您无法跨多个域使用标准表单身份validation对用户进行身份validation。 例如,dev.google.com和www.google.com是不同的域名,如果用户登录dev.google.com,则他不会自动登录www.google.com,除非Google为此启用了特殊function。 这是因为浏览器无法访问其他网站的cookie。

真正使跨域登录工作的唯一方法是在网站检查的URL的查询字符串中包含类似会话ID的键值,并设置用户的身份validationcookie。 您可以使用一小部分自定义代码在您的网站上手动执行此操作。

示例: http : //www.example.com/autoLogin.aspx?aliveid = 23232323

然而,这种方法的危险在于,有人可以通过找出用户使用的地址并检查会话ID来欺骗用户会话。 因此,您需要确保用于跨域validation用户的值是时间敏感和动态的。 不要将其设为用户的用户ID或用户名或类似名称。

现在,如果站点位于同一个域中,您可以为它们提供相同的MachineKey,然后当通过同一域中的不同网站移动时,已登录到一个站点的用户将不会被注销。

查看ASP.Net Membership Provider模型。

下面是MSDN上有关此资源的一小部分链接示例。 它应该涵盖您的所有需求。 最后两个链接是SQL中的示例实现。 您可以轻松扩展字段以满足您的需求。

  • 演练:使用成员身份和用户登录创建网站
  • 使用成员资格管理用户
  • 样本成员提供者实施
  • ASP.Net MVC会员入门套件

您的另一个选择是使用OpenID / Windows Live或类似方法实现登录。