【问题标题】:WIF - optional authenticationWIF - 可选身份验证
【发布时间】:2011-07-29 04:25:25
【问题描述】:

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

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

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

感谢任何想法。

【问题讨论】:

    标签: single-sign-on wif


    【解决方案1】:

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

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

    1. 用户点击重定向到合作伙伴网站的链接
    2. 在合作伙伴站点,请求被拦截,系统确定用户是登录 STS 还是匿名
    3. 如果用户与 STS 有有效会话,则为该用户提取声明

    问题是,如果不先将用户发送到 STS,您的 RP 无法知道用户有一个有效会话(RP 之间不相互通信,也不与 STS 通信。用户的浏览器被用作之间的通信方式)以 WS-Fed 指令和 SAML 令牌形式的 RP 和 STS 在重定向期间在 url 中传递)。如果用户被发送到 STS,那么他们必须进行身份验证,这对于匿名用户来说可能是个问题。

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

    您肯定很快就会知道,WIF 通常会提供拼图的部分,但每种情况都不同,您必须自己提供其他部分。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      • 2014-11-06
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 2014-03-30
      • 1970-01-01
      相关资源
      最近更新 更多