代码之家  ›  专栏  ›  技术社区  ›  Yannis

多个网站,单点登录设计[关闭]

  •  10
  • Yannis  · 技术社区  · 16 年前

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

    我在这里查看我的选项,因此这里是一个需求列表:

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

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

    考虑到为了简化这个问题而遗漏了大量的内容,这听起来像一个好的设计吗?

    但这看起来是一个非常常见的问题,所以没有任何现有的项目可以使用吗?

    谢谢你的阅读。

    2 回复  |  直到 8 年前
        1
  •  3
  •   Paul Mendoza    16 年前

    要认识到的基本问题是,您不能使用跨多个域的标准表单身份验证对用户进行身份验证。例如,dev.google.com和www.google.com是不同的域,如果用户登录dev.google.com,他不会自动登录www.google.com,除非google做了一些特殊的事情来启用它。这是因为浏览器无法访问其他网站的cookie。

    真正使跨域登录工作的唯一方法是在网站检查并设置用户身份验证cookie的URL查询字符串中包含一个键值,比如会话ID。您可能可以使用一小段自己的自定义代码通过站点手动完成这项工作。

    例子: http://www.example.com/autoLogin.aspx?sessionid=23232323

    不过,这种方法的危险在于,有人可能会通过查找用户使用的地址并检查会话ID来欺骗用户会话。因此,您需要确保用于跨域验证用户的值具有时间敏感性和动态性。不要让它成为用户的用户ID、用户名或类似的东西。

    现在,如果站点在同一个域中,您可以给它们所有相同的machinekey,那么当用户在同一个域中的不同站点中移动时,已经登录到一个站点的用户将不会被注销。

        2
  •  2
  •   Mikael Svenson    16 年前

    研究ASP.NET成员资格提供程序模型。

    下面是一个链接到有关这方面的资料的小样本。它应该满足你的所有需要。最后两个链接指向SQL中的示例实现。您可以轻松地扩展字段以满足您的需要。

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