【问题标题】:WIF SessionAuthenticationModule CookieHandler not writing FedAuth cookieWIF SessionAuthenticationModule CookieHandler 不写入 FedAuth cookie
【发布时间】:2012-12-16 19:37:29
【问题描述】:

在某些情况下,我无法让 Windows Identity Framework 写入 FedAuth cookie。我正在着手开发一套 MVC4 网站,这些网站已经使用 WIF 并成功地为自己的域编写了 FedAuth cookie。现在我正在尝试为我的套件中的每个域编写 cookie。

在我的开发机器上,我有三个由 IIS7.5 本地托管的网站(app1.mycompany.com、app2.mycompany.com 和 app3.DIFFDOMAIN.com)。当我登录 app1 时,我将 cookie 的域设置为“mycompany.com”,这意味着 app1 和 app2 是联合的,但我找不到包含 app3 的好方法。

FederatedAuthentication.SessionAuthenticationModule
                       .CookieHandler.Domain = "mycompany.com".


到目前为止我注意到/尝试过的事情:

  1. 在 app1 中,我可以设置 Domain = "app1.mycompany.com" 或 "mycompany.com" 并写入 cookie,但如果我将其设置为其他任何内容,则不会写入 cookie 因此写入 cookie 时必须对 Domain 属性进行一些基础验证。这是真的吗??

  2. 我在 app3 中编写了一个 API 服务,以便从 app1 调用(例如 https://app3.DIFFDOMAIN.com/fedauth),它设置 Domain = "DIFFDOMAIN.com"。

    • 当我从浏览器调用 api 时,会写入 cookie。
    • 当我使用 rest 客户端从 app1 调用 api 时,cookie 没有写入。
    • 当我 RedirectPermanent 从 app1 到 app3 url 时,cookie 被写入(但我并不想重定向)。

所以我想我在问为什么在使用 rest 客户端时不写入 cookie,以及我应该如何在所有域上联合身份验证

谢谢,
约翰。

【问题讨论】:

    标签: cookies wif federated-identity


    【解决方案1】:

    我不确定我得到了你。一般而言,WIF SAM 模块负责处理 FedAuth cookie。如果在您的网络配置中正确配置它,它会自动执行此操作。 FedAuth cookie 包含已发布的 STS 令牌。 FAM 模块正在拦截所有请求并将那些需要授权的请求重定向到 STS。在 STS 上进行身份验证后,SAM 模块正在创建 cookie 或与 session 组合(取决于配置)并将其放置在特定域下的客户端浏览器中。 SAM 和 WAF 不负责在所有域上联合身份验证,但 STS 负责。 STS 将其自己的 cookie 放置在客户端浏览器中,因此对于来自不同域的每次成功调用,STS 现在将依赖于用户登录的那个 cookie,并会自动将令牌发送到具有一组声明的该域。

    您必须为所有域设置配置。仅此而已,其他是WIF的业务。 其次是设置你的STS,你可以在网上找到样本。

    要详细了解完整的过程,请查看这篇精彩的文章: http://msdn.microsoft.com/en-us/magazine/ff872350.aspx

    希望对你有所帮助。

    【讨论】:

      【解决方案2】:

      您似乎遗漏了 2 点(尝试在它们上获取 more information 以获得更清晰的视图):

      • Cookie 的工作原理和用途。尝试为任何其他客户端设置 cookie,而不是您正在与之通信的任何其他客户端,或者为您的任何其他域设置 cookie 被认为是不安全的。当您的联合应用程序存储身份验证数据时,它会将其转换为 FedAuth cookie,然后发送到经过身份验证的客户端。客户端在后续请求中将 cookie 发回,服务器将其解包以“了解”用户的身份验证。

      • 联合身份验证的工作原理。您环境中的每个联合应用程序 (RP) 都要求 STS 服务对用户进行身份验证。 STS 向 RP 发送一个身份验证令牌,RP 以某种方式存储它以便能够区分它的用户。

      这两种关系是一对一的。客户端-应用程序和应用程序-STS。无需与其他任何人共享一个客户端会话的身份验证信息。为什么?客户端使用 STS 进行身份验证,STS 将此信息发送给任何想要验证此客户端的 RP。应用程序之间不共享信息,仅与单个 STS 共享。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-27
        • 2013-04-30
        • 1970-01-01
        • 1970-01-01
        • 2013-01-22
        • 1970-01-01
        • 2021-01-11
        • 2015-02-20
        相关资源
        最近更新 更多