如果用户在 STS 上登录,如何从联合被动登录控件中检测联合标识


嗨,我正在我的 asp.net 站点(称为

ChildSite)上使用FederatedPassiveSignInControl,从另一个 asp.net 站点(称为ParentSite)上设置的STS获取用户身份。我的网站 (ChildSite) 的身份验证设置为 FormsAuthentication,因此 FederatedPassiveSignInControl 位于 ChildSite 的窗体身份验证登录页上。

我有 2 种情况。首先,用户登录到ParentSite,然后通过ParentSite中的链接继续访问ChildSite。在第二个中,用户直接进入ChildSite并登录到ChildSite:

场景 1:

  1. 用户在浏览器中打开父网站
  2. 用户登录到父网站
  3. 父网站在浏览器中显示指向子网站的链接
  4. 用户单击指向子网站的链接
  5. 用户转到子站点

在这里,用户来到登录页面。想要的行为是用户被无缝重定向到子网站上请求的 URL,因为他已经在父网站上登录。

相反,将显示登录页面,用户必须单击FedratedPassiveSigninControl按钮以检索其身份,然后重定向。我无法设置 FedratedPassiveSigninControl 属性 autosignin="true"。当未登录时,它始终会将用户重定向到父站点,这将破坏方案 2。

想知道我如何检测,或者我如何让 FederatedPassiveSignin 控件(或其他 WIF 组件)检测用户是否已登录,而不显示 FedratedPassiveSigninControl 并将用户转发到他请求的页面。

场景 2:

  1. 用户在浏览器中打开子网站
  2. 用户在 ChildSite 的文本输入中输入凭据,然后单击登录。
  3. 将显示子站点上请求的页面。

我在这里错过了什么吗?

干杯莫特布

最简单的方法是在方案 1 中的第 4 步中添加一个额外的查询字符串参数,以便当您最终进入登录页面时,您有一个"if":"如果存在查询字符串参数,则自动登录 = true"。

这称为"主领域发现",尽管您的方案并不典型,因为 hrd 通常涉及两个或多个 sts,在这里您必须区分 sts 和表单身份验证。

这看起来像一个经典的 SSO 场景。父网站和子网站可能应该是 2 个不同的信赖方。如果用户转到 ParentSite,则每当他们遇到受保护的资源(任何需要对用户进行身份验证的资源)时,他们将被重定向到 STS 进行身份验证。在 STS 和用户浏览器之间建立会话,然后用户使用有效令牌返回父站点(假设是"快乐路径")。

当他们遇到子站点上的受保护资源时(例如,通过父站点上的链接),它们将再次重定向到 STS(例如,他们将专门为第二个信赖方 ChildSite 请求令牌)。这一次,由于已存在与 STS 的会话,因此身份验证步骤已完成,并颁发了第二个令牌。所有这些都对用户无缝运行。

"声明指南"的这一章涵盖以下方案: http://msdn.microsoft.com/en-us/library/ff359102

附加说明:不应在任何站点中输入凭据,而应在 STS 中输入凭据。

最新更新