WIF - 可选的身份验证

时间:2011-07-15 12:58:01

标签: single-sign-on wif

我正在开发一个概念验证应用程序。基本功能有效,我可以登录到一个网站,链接到共享相同STS的另一个站点,合作伙伴站点可以正确地获取凭据。 但是,如果我们链接到的页面需要身份验证,合作伙伴网站只会请求令牌(我猜这种情况有道理。)

理想情况下,我想链接到不需要您进行身份验证的合作伙伴页面,但如果用户已经过身份验证,我希望至少能够在合作伙伴网站上识别它们。 目前,如果我的合作伙伴登录页面不需要身份验证,则用户登录时似乎不会登录。一旦用户请求合作伙伴网站上需要身份验证的页面,它就会抓取令牌而无需用户登录。

我尝试过使用SecurityTokenReceived和RedirectingToIdentityProvider事件,但到目前为止,我很难过。

任何想法都表示赞赏。

1 个答案:

答案 0 :(得分:1)

因此,您遇到的问题是处理SessionAuthenticationModule劫持请求。该模块负责检测用户是否具有有效会话(基于从STS成功重定向时写入的cookie),如果没有,则将用户重定向到STS以获取有效令牌。 WSFederationAuthenticationModule提供了挂钩到重定向/认证过程的各个阶段所需的事件。

根据您的描述,听起来您希望发生以下情况:

  1. 用户点击重定向到合作伙伴网站的链接
  2. 在合作伙伴网站上拦截请求,系统会确定用户是否已登录STS或匿名
  3. 如果用户与STS有有效会话,则提取该用户的声明
  4. 问题是,您的RP无法知道用户是否具有有效会话而没有先将用户发送到STS(RP不会相互通信或STS。用户的浏览器用作两者之间的通信方式。在重定向期间,在URL中传递了WS-Fed指令和SAML令牌形式的RP和STS。如果用户被发送到STS,那么他们必须进行身份验证,这可能是匿名用户的问题。

    因此,我不认为您可以通过配置或拦截请求来提取“技巧”,以确定用户是否与STS有效会话。但可能能够从合作伙伴网站截获的引荐来源传递提示。此提示可以采用url上的参数形式,该参数向合作伙伴站点指示当前用户具有有效会话并继续并重定向到STS(缺少此提示将指示匿名用户)。您还可以构建一个系统,以使用两个站点都可访问的资源(即数据库)“切换”已登录用户的知识。

    正如您肯定很快就会了解到的那样,WIF经常提供拼图,但每种情况都不同,您必须自己提供其他部分。

    希望这有帮助!