我有个问题。我最近一直在做一些工作的一个客户有一系列具有不同登录机制的网站。他正在寻求慢慢迁移到单点登录他的网站机制(全部写在asp.net mvc
).
我正在此处查看我的选项,因此以下是要求列表:
- 它必须是安全的(废话)
- 它需要支持除了通常的名称、地址之外的额外用户属性(例如用户的金钱或信用)
- 它必须提供一个集中的用户管理 Web 控制台以方便他(我知道这将是我选择的任何设计解决方案之上的一个小项目)
- 它必须与现有网站集成,而无需重新设计整个产品(我知道这取决于当前的产品实现)。
- 它必须在用户注册时向用户发送电子邮件(以便他激活他的帐户)
- 它必须处理当用户单击电子邮件中的“激活我”链接时激活用户的问题(我了解 5 和 6 需要某种形式的电子邮件模板系统来支持每个应用程序的不同电子邮件)
我正在考虑创建一个与表单身份验证一起工作的库,该库公开所需的任何方法(例如登录、注销、激活等)以及一个小型的安静服务来实现从电子邮件激活、注册处理等。
考虑到为了使这个问题简洁明了而省略了很多内容,这听起来是一个很好的设计吗?
但这看起来是一个非常常见的问题,所以没有我可以使用的现有项目吗?
谢谢阅读。
需要认识到的基本事实是,您无法跨多个域使用标准表单身份验证来对用户进行身份验证。例如,dev.google.com 和 www.google.com 是不同的域,如果用户登录 dev.google.com,他不会自动登录 www.google.com,除非 Google 采取特殊措施来启用此功能。这是因为浏览器无法访问其他网站的cookie。
真正使跨域登录发挥作用的唯一方法是在 URL 的查询字符串中包含一个键值(例如会话 ID),网站会检查该值并设置用户的身份验证 cookie。您可以使用少量您自己的自定义代码通过您的网站手动执行此操作。
例子:http://www.example.com/autoLogin.aspx?sessionid=23232323 http://www.example.com/autoLogin.aspx?sessionid=23232323
但这种方法的危险在于,有人可能通过找出用户使用的地址并检查会话 ID 来欺骗用户会话。因此,您需要确保用于跨域验证用户身份的值是时间敏感且动态的。不要将其设为用户的用户 ID 或用户名或类似内容。
现在,如果这些站点位于同一域中,您可以为它们提供相同的 MachineKey,然后当用户在同一域中的不同网站之间移动时,已经登录到一个站点的用户将不会被注销。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)