0

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

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

场景一:

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

在这里,用户来到登录页面。想要的行为是用户已在 ParentSite 登录,因此被无缝重定向到 ChildSite 上请求的 URL。

而是显示登录页面,用户必须单击 FedratedPassiveSigninControl 按钮来检索他的身份,然后被重定向。我无法设置 FedratedPassiveSigninControl 属性 autosignin="true"。它总是在未登录时将用户重定向到 ParentSite,这会破坏场景 2。

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

场景二:

  1. 用户在浏览器中打开ChildSite
  2. 用户在 ChildSite 的文本输入中输入凭据并单击登录。
  3. 显示 ChildSite 请求的页面。

我在这里错过了什么吗?

干杯,死

4

2 回答 2

1

最简单的方法是在场景 1 的第 4 步中添加一个额外的查询字符串参数,这样当您最终到达登录页面时,您就会有一个“if”:“如果存在查询字符串参数,则 AutoSignIn = true”。

这被称为“家庭领域发现”,尽管您的情况并不典型,因为 hrd 通常涉及两个或多个 stses,在这里您必须区分 sts 和 forms 身份验证。

于 2012-06-28T18:43:23.950 回答
0

这看起来像一个经典的 SSO 场景。ParentSite 和 ChildSite 应该是 2 个不同的依赖方。如果用户访问 ParentSite,那么每当他们访问受保护的资源(任何需要用户进行身份验证的资源)时,他们就会被重定向到 STS 进行身份验证。在 STS 和用户浏览器之间建立会话,然后用户使用有效令牌返回到 ParentSite(假设“快乐路径”)。

当他们点击 ChildSite 上的受保护资源(例如,通过 ParentSite 上的链接)时,他们将再次被重定向到 STS(例如,他们将请求专门用于 ChildSite 的令牌,第二个依赖方)。这一次,因为已经有一个与 STS 的会话,所以认证步骤已经完成,并且颁发了第二个令牌。所有这些都为用户无缝工作。

“索赔指南”的这一章涵盖了这种情况:http: //msdn.microsoft.com/en-us/library/ff359102

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

于 2012-06-28T16:36:06.470 回答