我在其中一个页面上有一个带有silverlight应用程序的Web应用程序。该网站使用WIF保护。我正在尝试从silverlight到与我的网站在同一appdomain中托管的服务进行WCF调用。
如果我启用了AspNetCompatibilityMode,这可以正常工作。浏览器已经过身份验证,因此在进行WCF调用时,Silverlight客户端会发送FedAuth cookie,WIF会从会话cookie(FedAuth / FedAuth1)中正确设置HttpContext.Current.User。
不幸的是我需要关闭AspNetCompatibilityMode。在这种情况下,我可以看到silverlight WCF调用仍将FedAuth cookie传递给服务器,SessionAuthenticationModule正确设置了Thread.CurrentPrincipal。不幸的是,sessionauthenticationmodule似乎在与我试图调用的实际WCF方法不同的线程中运行,因此我在WCF / WIF管道的某处失去了身份。
有解决方法吗?我已经尝试创建SessionAuthenticationModule的自定义实现并覆盖SetPrincipalFromSessionToken(我可以在其中访问我的声明等)但我不知道在哪里可以存储主体,以便在通道处理程序将调用发送到我之后我可以访问它另一个线程上的服务。