1

在 OpenIdWebRingSso 示例(PR(提供者)和 RP(依赖方)- 3.5.0.10357)上,如果我在 PR 上注销它不会在 RP 上注销我(在下一页请求上),并且在 RP 上注销不会触发 PR 上的注销。

此外,当用户未通过身份验证时,PR 总是重定向到登录(询问用户名和密码)。在 RP 上浏览不需要身份验证的页面时,我需要的只是检查用户是否经过身份验证的请求。如果是这样,请在 RP 上登录用户(那部分很好),但如果不是,则只返回用户未通过身份验证的响应,而不要求登录(除非我确实单击登录按钮或尝试访问 [授权]页)。更新:用“request.Mode = 0;”解决了那部分问题

因此,我需要在 RP 上检查每个页面请求是否已针对 PR 进行了身份验证,并且仅在必要时询问密码。所以问题是:

1) 我可以在示例或其他参考资料中找到此代码吗?

2)如果不是,将它放在 MVC3 应用程序上的最佳位置是什么:- httpModule?- 在基本控制器上并覆盖无效初始化?- OnActionExecuting(ActionFilterAttribute)?- 别的地方?

3) 这种方法对 SSO 是否正确(我有 5 个不同的站点/域为一家公司)?

提前致谢!

4

1 回答 1

0

由于所有站点都属于同一家公司并共享对 userRepository(数据库)的访问权限,因此我决定采用不同的方法,更简单并避免过多的重定向:

  • 受信任的站点(白名单中的依赖方 (RP))向主站点(提供者)发出请求(重定向)并返回 URL。
  • 主站点确保请求(returnURL)来自域白名单
  • 登录用户(如果未登录,则显示登录表单),将用户标记为登录数据库并将临时令牌添加到用户数据库。
  • 主站点返回(重定向)到带有令牌的 RP。
  • RP 使用令牌查看数据库,记录用户并删除令牌。

SSOff 也很简单:只需将用户数据库中的每个请求都检查到布尔记录(userLogged)中。没有重定向。注销时只需将记录 (userLogged) 更改为 false,每个站点都会知道。

为了避免 RP 在用户已登录(重定向)并在 SERP 上受到惩罚时始终检查提供程序,我仅在用户登录后/如果用户登录后将查询字符串 (?checklog=yes) 动态添加到白名单站点链接 url。因此,如果我在登录后从站点 A 转到站点 B,它将转到 siteB.com?checklog=yes,这将提示站点与提供商进行重定向以获取并记录用户……而谷歌将永远不会看到重定向。

于 2012-05-04T16:27:38.110 回答