语境:
Stack 和 Bing 上有一些讨论WCF和与ASP.NET的会话共享的线程。没有一个能完全满足我的问题。所以这里是:
我有一个MVC站点,它在路径“/services”下的RouteTable中也有一些服务。这一切都很好。我可以同时调用控制器操作和 WCF 服务方法。
我已使用Windows Azure 访问控制服务 (ACS)启用WIF和联合身份验证。这也很好用。我可以使用 Facebook、Google 等登录,并且在我的网站上明确建立了一个会话。我可以调用 MVC 控制器操作和 WCF 方法。在这些主体内部,当前用户的 IPrincipal 设置为我当前的会话。
现在我想成为一个好孩子并使用自定义ClaimsAuthenticationManager 和自定义 ClaimsAuthorizationManager。现在出现了一个奇怪的问题:
设置:
对于这种情况,我已登录。我有一个会话。我可以在 MVC 控制器方法和 WCF 服务方法的方法体中确认这一点。这意味着我们可以将自定义 ClaimsAuthenticationManager 排除在外,因为当我已经有一个会话时它不会被触及。
让我头疼的是自定义 ClaimsAuthorizationManager。
当我调用 MVC 站点时,我通过 ClaimsAuthorizationManager.CheckAccess 方法内的会话以及 MVC 控制器操作的主体内的会话进行身份验证。到目前为止,一切都很好。
问题:
当我调用 WCF 服务时,我没有在 ClaimsAuthorizationManager.CheckAccess 方法内使用我的会话进行身份验证,但是当我在 WCF 服务方法内点击断点时,我(突然)通过了身份验证。
这没有任何意义!看来我的会话没有在 ClaimsAuthorization 管理器内部膨胀,而是在我点击自己的 WCF 代码时,会话就位!
怎么会这样?
干杯,
马格努斯