0

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

我知道的。

我可以在主门户中创建一个 auth cookie,通过设置机器密钥和相同的 authcookie 名称,每个应用程序都可以使用它。我已经对此进行了测试,它似乎有效。

我的问题

由于每个站点/虚拟目录在用户访问站点时每个用户和每个应用程序都具有不同的权限,因此我需要从数据库中获取他的权限,但是我不能用新的详细信息覆盖 auth cookie 用户数据,因为他可能有多个选项卡等打开一次在不同的网站上。那么我怎样才能为每个用户和每个应用程序拥有一个额外的 cookie 存储,以保存应用程序特定的详细信息。我知道我每次都可以访问数据库,但这是每次回发的开销。

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

任何帮助建议将不胜感激

谢谢

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

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

4

1 回答 1

1

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

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

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

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

希望这可以帮助

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

于 2013-09-09T11:38:21.367 回答