DotNetOpenAuth SSO示例行为

时间:2012-04-28 23:08:14

标签: openid single-sign-on dotnetopenauth

在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个不同的站点/域名)?

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

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

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

为了避免RP总是检查提供者,如果用户已经登录(重定向)并且在SERP上受到惩罚,我只在/用户登录后才向白名单网站链接网址添加一个查询字符串(?checklog = yes)。因此,如果我在登录后从站点A转到站点B,它将转到siteB.com?checklog=yes,这将提示站点与提供商进行重定向以获取和登录用户...并且谷歌将永远不会看到重定向。