【发布时间】:2011-10-28 15:24:34
【问题描述】:
我们的应用架构如下: 1) WCF 服务作为一个门面层,位于服务、业务逻辑和数据访问层之上 2) 每个客户端,无论是 MVC/ASP.NET,还是任何其他类型的应用程序,都有一个 ClientTag,首先需要对其进行身份验证并颁发一个“访问令牌”。然后,客户端将这个令牌与每条消息一起传递到 Facade 层 3) 系统将托管在 Windows Azure 上
使用 WCF 会话可以轻松实现,如下所示: 1) 客户端发起对 WCF 的调用以获取令牌(客户端到 WCF 会话已建立,因此每次后续通信都是相同“对话”的一部分) 2) WCF 对 ClientTag 进行身份验证,颁发令牌,并将其存储为局部变量 3) 客户端将令牌存储在自己的 Session 中,并在每次请求时将其传递给 WCF
问题在于 Azure(由于其高可用性/负载平衡特性)不支持 WCF 会话。所以,问题是我们如何实现这一点。
一种解决方案是使用 AppFabric 缓存来模拟 WCF 层中的会话状态。我们会将访问令牌存储在那里,然后根据客户端传入的内容对其进行验证。这样做的问题是客户端和 WCF 之间没有并发。因此,我们必须在来自同一客户端的每个请求上提前 WCF 会话超时,但我们希望避免在每个请求上更新缓存(可能是数百/秒)。
有什么建议吗?有没有人在 Azure 上实现过类似的东西。任何反馈将不胜感激。
附:不仅会在服务器上进行身份验证,而且还会对每个客户端进行自定义授权。 (某些客户端可能可以访问某些功能,而其他客户端可能没有)。
谢谢!
【问题讨论】:
标签: wcf session authentication azure