在OpenIdWebRingSso示例(PR(提供商)和RP(依赖方) - 3.5.0.10357)如果我在PR上注销它不会在RP上登录(在下一页请求中),并且注销RP不会触发PR的注销。
此外,当用户未经过身份验证时,PR始终会重定向到登录(请求用户名和密码)。浏览RP上不需要身份验证的页面时,我需要的是检查用户是否经过身份验证的请求。如果是这样,请将用户登录到RP(该部分没问题),但如果没有,则只返回用户未经过身份验证的响应,而无需登录(除非我单击登录按钮或尝试访问[授权]页面)。更新:使用" request.Mode = 0;"
解决了该部分所以我在RP上需要的是检查每个页面请求的天气是否经过身份验证,而不是PR,只在必要时要求输入密码。所以问题是:
1)我可以在样品或其他参考上找到此代码吗?
2)如果没有,那么将它放在MVC3应用程序上的最佳位置是什么: - httpModule? - 在基本控制器上并覆盖void Initialize? - OnActionExecuting(ActionFilterAttribute)? - 在别的地方?
3)这种方法对于SSO是否正确(我有一个公司有5个不同的站点/域名)?
提前致谢!
答案 0 :(得分:0)
由于所有站点都属于同一家公司并共享对userRepository(数据库)的访问权限,因此我决定采用不同的方法,更简单并避免过多的重定向:
SSOff也很简单:只需将用户数据库中的每个请求检查到bool记录(userLogged)。没有重定向。注销时只需将记录(userLogged)更改为false,每个站点都会知道。
为了避免RP总是检查提供者,如果用户已经登录(重定向)并且在SERP上受到惩罚,我只在/用户登录后才向白名单网站链接网址添加一个查询字符串(?checklog = yes)。因此,如果我在登录后从站点A转到站点B,它将转到siteB.com?checklog=yes,这将提示站点与提供商进行重定向以获取和登录用户...并且谷歌将永远不会看到重定向。