Cookies WIF SessionAuthenticationModule CookieHandler未写入FedAuth cookie

Cookies WIF SessionAuthenticationModule CookieHandler未写入FedAuth cookie,cookies,wif,federated-identity,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的域设置为“mycompa

在某些情况下,我无法让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".

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

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

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

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

    谢谢,

    约翰。

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

    您必须为所有域设置配置。只有这一点,另一个是WIF的业务。 第二是建立你的STS,你可以在网上找到样品

    要详细了解整个过程,请阅读这篇精彩的文章:


    我希望这将对您有所帮助。

    您似乎遗漏了两点(尝试了解它们以获得更清晰的视图):

    • cookies是如何工作的,它们的用途是什么。尝试为您刚刚与之通信的客户机以外的任何其他客户机或您的域以外的任何其他域设置cookie被认为是不安全的。当您的联邦应用程序存储身份验证数据时,它会将其转换为FedAuth cookie,并将其发送到经过身份验证的客户端。客户机在后续请求中发回cookie,服务器将其展开以“了解”用户的身份验证

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

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