2

在某些情况下,我无法让 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 时的属性。真的吗??

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

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

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

谢谢,
约翰。

4

2 回答 2

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

我希望这会对你有所帮助。

于 2013-01-05T12:28:20.980 回答
0

看来您缺少 2 点(尝试获取有关它们的更多信息以获得更清晰的视图):

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

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

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

于 2015-01-29T08:08:52.853 回答