3

我在其中一个页面上有一个带有 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 (我可以在其中访问我的声明等),但我不确定我可以在哪里存储主体,以便在通道处理程序将调用分派给我的之后我可以访问它在另一个线程上服务。

4

0 回答 0