0

我计划实现一个面向外部的 ASP.NET Web 应用程序以及一个提供外部可用 API 的 Windows Communication Foundation (WCF) 服务。我将通过使用 Windows Identity Foundation (WIF) 滚动我自己的安全令牌服务 (STS) 来为 Web 应用程序和服务提供安全性。

这些文章描述了我打算如何实现这一点的基础知识:http: //msdn.microsoft.com/en-us/magazine/ee335707.aspxhttp://devproconnections.com/development/generating-saml-tokens -wif-part-2

结合 Vittorio Bertocci 关于该主题的优秀书籍提供的信息: http ://www.amazon.com/Programming-Windows-Identity-Foundation-Dev/dp/0735627185/ref=sr_1_6?ie=UTF8&qid=1366300926&sr=8- 6&keywords=维托里奥+贝托奇

我应该拥有完成这项任务所需的所有工具和信息。该应用程序的用例如下:用户登录到我们拥有的 ASP .NET Web 应用程序,包括用户身份验证和授权机制。在此应用程序上,他们单击一个链接,该链接使用 SAML 单点登录 (SSO) 到第三方应用程序(与我们有紧密的业务关系)。在这个第三方应用程序上,用户可以透明地处理我们存储在我们组织内部的另一个应用程序上的文件。基本上,他们将对我的 Web 应用程序/WCF 服务执行透明/静默 SAML SSO,以便在登录到第三方 Web 应用程序时保存或检索文档。

就像我之前说的,我想我已经掌握了如何为这个过程实现授权和身份验证的基础知识。

但是,我的安全团队提出的一项要求是,我们确保从外部公开但完全归我们所有的原始 Web 应用程序登录到第三方站点的用户,具有与外部站点的活动会话. 简而言之,我们需要确保该用户实际登录到站点 A,正在使用站点 B,但希望通过确保他们实际上仍然登录到站点 A 来访问站点 C 上的资源。

我将如何获得有关该用户的这些信息?现在,我确实为站点 A 推出了自己的角色提供程序,但身份验证是通过表单身份验证使用较旧的用户名/密码机制执行的,该机制不包括使用 ASP .NET 2.0“标准”成员资格提供程序。因此,我无法使用 Security.Web.Membership。

最后,同样的过程将适用于我们活动目录上的内部用户,他们将从我们的内部网络登录到站点 B,然后再次使用站点 C。我相信我们将使用 ADFS v2 进行身份验证。在针对站点 C 进行身份验证之前确保所述用户在 AD 中处于活动状态的任何提示?

4

1 回答 1

0

跟踪网站用户是否仍处于活动状态的唯一合理方法是使用有效期较短(例如 10 分钟)的令牌,每次用户浏览网站时都会自动重置。有了这个,您可以说用户在过去 10 分钟内处于活动状态并登录。您需要在服务器上的持久存储中跟踪令牌,该令牌会随着最近用户操作/令牌重置的时间而更新,以便后端系统可以询问“此用户是否仍然处于活动状态?”,而您需要向 Web 客户端传递一些内容,以便他们可以在每个后续 Web 请求中将其传递回服务器,以保持会话处于活动状态。这通常是一个会话 cookie。cookie 可能与令牌相同,或者您可以将 cookie 设置为随机值,如果您不这样做,该值将映射到服务器内部的令牌 不希望浏览器应用程序知道真正的令牌。如果用户主动退出 Web 应用程序,那么您将在后端数据库中取消令牌。

其他技术可能涉及保持长时间运行的 http 连接打开(基于 ala web 的 irc 聊天),但这会消耗大量网络资源,特别是在您的服务器和防火墙上,并且它并不能真正提供任何更大的保证,即用户实际上仍在寻找在浏览器中的 Web 应用程序中。已打开 30 分钟但在 20 分钟内没有页面导航的会话听起来像是用户去吃午饭并保持浏览器窗口打开。如果您无论如何都必须跟踪页面导航,那么保持 http 连接打开并不会真正为您带来任何好处。

于 2013-04-18T16:43:39.373 回答