【问题标题】:global admin page for multiple applications in ASP.NetASP.Net 中多个应用程序的全局管理页面
【发布时间】:2011-09-13 02:27:40
【问题描述】:

我想知道是否有人可以就实现全局登录的安全方式提供建议。我有一个管理页面,可以在输入您的用户名和密码后访问活动目录管理组。

  1. 当前登录的帐户(在计算机上)无关紧要
  2. Web 浏览器中的用户转到 Web 应用程序,使用应用程序名称的查询字符串重定向到全局登录页面
  3. 输入 AD 中帐户的用户名和密码(不一定是当前计算机登录的用户)
  4. 认证(查找用户、通过等,认证有效)
  5. 重定向回原始网络应用。

一旦发生重定向,我如何安全地告诉原始网络应用此用户正常,直到原始网络会话终止?

我正在考虑的实现方式:

我最初的想法是将原始应用程序的会话 ID 传递给登录页面以及应用程序 姓名。检查身份验证后,将该会话存储在数据库中。其他应用程序的母版页在页面加载时验证会话 ID 是否匹配。在会话关闭时,从数据库中删除当前会话 ID。

【问题讨论】:

  • 我按照您的要求进行操作,但我个人不会这样做。每个应用程序都应该有自己的登录页面或当前登录的用户检测(如您所说,它可能与本地登录的用户不同,很好......),如果用户可用,则如果未显示登录页面,则不显示登录。如果您集中使用一个登录页面,您最终会遇到一个故障点,并且如果该故障点出现故障,那么即使这些应用程序池和服务器正常,所有其他应用程序也不可用...... :(
  • 仅供参考,在“会话关闭”上——正如你所说的——不能保证在 ASP.Net 应用程序中触发。
  • 它并不总是触发?为什么不呢?

标签: c# asp.net


【解决方案1】:

在某些情况下,您不能准确地依赖 sessionIDSessionID 仅在(任何)页面请求会话变量后变为常量值,如果您没有在 global.asax 中定义 Session_Start。如果您登录用户并且默认页面不访问会话,那么您最终会为后续请求获得不同的会话 ID,直到发出会话请求。通常它总是不变的,因为在global.asax 中有一个默认的空session_start 事件。

但与您的模型类似,您可以生成GUID(或确保您在登录/身份验证时访问会话)并将其存储在用户表中并过期。您的网站可以检查此密钥,如果当前有效,则自动让用户登录。

您也不能依赖session_end 事件,因为没有真正准确的检测方法(例如:用户关闭浏览器)。因此,您应该将此 ID 与过期时间一起存储,最好与会话超时相同。就像会话一样,您将需要扩展它,例如滑动到期。这样,该 id 将在一段时间不活动后过期。

另外,您可能会对这个Claims-Based Single Sign-On for the Web 感兴趣。

【讨论】:

  • 我还需要一段时间才能实现它,因为我还有其他研究要做。所以我会回来,如果这是正确的,我会给你你的观点:) 不知道什么时候。
【解决方案2】:

您所描述的内容听起来使用Windows Identity FoundationActive Directory Federation Services 2.0 会更好地实现。我不知道你的所有要求的范围,但看看这些会给你什么开箱即用可能很有价值。

【讨论】:

    【解决方案3】:

    您可以使用 cookie。如果将应用程序的名称传递给登录页面,则可以将该应用程序名称设置为 formsauthentication cookie 的 PATH 属性。通过设置 PATH 属性,您可以有效地将 cookie 的可读性限制为该路径内的页面。因为它是一个通用的登录界面,所以这可能需要在处理 cookie 信息解析的通用页面基类中完成一些代码。

    【讨论】:

      【解决方案4】:

      您可以在 .NET 应用程序之间共享身份验证令牌,如果您愿意,甚至可以在 .NET CLR 之间共享。我认为这将为您提供您正在寻找的单一标志。

      您需要在应用程序之间共享一个机器密钥。您可以使用此链接上的密钥生成器应用程序代码示例生成机器密钥,然后在每个应用程序中引用相同的密钥,即可共享登录:

      http://msdn.microsoft.com/en-us/library/ms998288.aspx

      在跨域或跨机器/网络农场等查看事物时需要考虑一些因素,但如果所有应用程序都在同一个盒子上,那就不太难了。

      更难的一面是共享会话状态之类的内容,我认为这些内容无法跨应用程序池完成。 (上次我在新应用程序上手动重新创建了会话对象:(但那是在 1.1 和 2.0 应用程序之间)

      编辑:我去年写了一个粗略的文章,并用它作为我网站上演示文章的测试,如果你想进一步分解一些东西,可能值得一读(忽略未完成的网站!): http://www.dougmcdonald.co.uk/test/html5/v5/articles/2010/05/10/Sharing-forms-authentication-between-applications/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多