多个站点域和虚拟目录单一登录

时间:2013-09-09 10:48:45

标签: asp.net forms-authentication

我正在创建一个项目,其中包含一个包含多个应用程序和网站的登录门户。我想允许用户登录,然后单击任何应用程序并可以访问它。一些注意事项是:每个应用程序都在用户配置文件中定义,即哪些用户可以看到什么。每个用户的每个应用程序权限也不同。因此,用户a可能是应用程序的管理员,但只是应用程序b中的普通用户。

我所知道的。

我可以在主门户中创建一个auth cookie,通过设置机器密钥和相同的authcookie名称,每个应用程序都可以使用它。我用这个做了一个测试,它似乎工作。

我的问题

由于每个站点/虚拟目录在用户访问站点时对每个用户和每个应用程序具有不同的权限,我需要从数据库中获取其权限,但我无法用新的详细信息覆盖auth cookie userdata,因为他可能有多个选项卡等在不同站点上一次打开。那么如何为每个用户和每个应用程序提供额外的cookie存储来保存应用程序特定的详细信息。我知道我每次都可以访问数据库,但每个帖子的开销都是分配的。

也许另一种选择是使用主authcooke检查用户是否已登录,然后每个应用程序和用户都有一个新的auth cookie,但是我怎么能有2个authcookies,这可能会让人感到困惑,第二个需要超时主要的是et ci think

感谢任何帮助建议

感谢

------------------- 编辑 -------------------- ---------

我们为所有站点都有一个用户表,而不是每个站点1个。然后我们将用户映射到应用程序,然后映射用户应用程序和角色。所以当你到达一个应用程序时,它必须检查用户是否具有访问权限以及该角色是什么。登录到主站点时,所有其他用户详细信息已在auth cookie中。我们这样做是因为我们必须在一个应用程序中管理用户而不是每个应用程序。希望这有助于理解我的要求。

1 个答案:

答案 0 :(得分:1)

您所描述的是“经典”SSO(单点登录)示例。人们尝试过这种方式的方式很多,并且在Google上有很好的记录。

执行此操作的一种方法是让您的SSO服务器(例如,您登陆并登录的第一个位置)发出安全“令牌”(例如Guid),然后将其存储在cookie中或附加到URL。对应用程序的每次后续调用都可以在数据库中查找令牌,验证它的有效性并继续(或者如果无效则启动用户)。

使用数据库还允许您为令牌有效的所有应用程序设置超时。

然后可以将其扩展为允许数据库存储每个用户可以访问的应用程序等。我已经用非常广泛的术语描述了这一点,但它可能是一个很好的起点。

希望这有帮助

顺便说一句:在每个请求上查询数据库不是太多的开销。我有应用程序可以做到这一点,并在加载300多个用户时仍然具有高性能。