Openid DotNetOpenAuth SSO示例行为

Openid DotNetOpenAuth SSO示例行为,openid,single-sign-on,dotnetopenauth,Openid,Single Sign On,Dotnetopenauth,在OpenIdWebRingSso示例(PR(提供商)和RP(依赖方)-3.5.0.10357)上,如果我在PR上注销,它不会在RP上注销(在下一页请求中),并且在RP上注销不会触发在PR上注销 此外,当用户未经身份验证时,PR总是重定向到登录(询问用户名和密码)。当我在RP上浏览一个不需要身份验证的页面时,我需要的是一个检查用户是否经过身份验证的请求。如果是这样,请将用户登录到RP(这一部分很好),但如果不是这样,只需返回一个用户未经身份验证的响应,而不要求登录(除非我确实单击了登录按钮或尝试

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


提前谢谢

由于所有站点都属于同一家公司,并且共享对用户存储库(数据库)的访问权限,我决定采用一种不同的方法,这种方法简单得多,并且避免了过多的重定向:

  • 受信任站点(白名单中的依赖方(RP))使用返回url向主站点(提供商)发出请求(重定向)
  • 主站点确保请求(returnURL)来自域的白名单
  • 记录用户(如果未记录,则显示登录表单),将用户标记为已登录数据库,并向用户数据库添加临时令牌
  • 主站点返回(重定向)到带有令牌的RP
  • RP使用令牌查看数据库,记录用户并删除令牌
SSOff也很简单:只需将每个请求检查到用户数据库中的bool记录(userLogged)。没有重定向。注销时只需将记录(userLogged)更改为false,每个站点都会知道

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