WIF SessionAuthenticationModule CookieHandler没有编写FedAuth cookie

时间:2013-01-02 12:26:04

标签: cookies wif federated-identity

在某些情况下,我无法让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时,必须对Domain属性进行一些基础验证。这是真的吗?

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

    • 当我从浏览器调用api时,会写入cookie。
    • 当我使用rest客户端从app1调用api时,cookie 不是写的。
    • 当我从app1 RedirectPermanent到app3 url时,会写入cookie(但我真的不想重定向)。
  3. 所以我想我问为什么在使用休息客户端时没有写入cookie,以及我应该如何在所有域上联合身份验证

    谢谢,
    约翰。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

您似乎错过了2分(尝试获取more information以获得更清晰的视图):

  • Cookie的工作原理及其用途。尝试为任何其他客户设置一个cookie,而不仅仅是您与其他域之间进行通信的域或其他域,这被认为是不安全的。当联合应用程序存储身份验证数据时,它会将其转换为FedAuth cookie,并将其发送到经过身份验证的客户端。客户端在后续请求中发回cookie,然后服务器将其解包到“#34; know"用户的身份验证。

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

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