是否可以在没有共享会话状态存储的情况下跨 webfarm 启用 ServiceStack 身份验证?

Is it possible to enable ServiceStack auth across a webfarm without a shared session state storage?

使用 ASP.NET 表单身份验证,可以将网络场中的所有服务器设置为共享相同的机器密钥来加密身份验证票证,这意味着如果您可以在应用程序规模中不需要会话状态就可以通过去网络农场很容易。

http://www.iambacon.co.uk/blog/getting-asp-net-authentication-to-work-on-a-web-farm

有没有一种方法可以使用 ServiceStack 身份验证来完成这种断开连接的设置,或者实现是否需要将共享会话状态持久保存在所有 Web 服务器都可以访问的某个地方?我假设共享状态是必需的,但如果有办法解决它,我有兴趣了解更多...(我们在全球范围内进行负载平衡,因此共享状态更具挑战性)

服务堆栈Sessions are essentially the User Session DTO's serialized in the registered Caching providers。除了 MemoryCacheClient 之外的所有缓存提供程序都保留在分布式数据存储中,因此它们通过使用相同的配置自然地实现负载平衡。

实施 IAuthWithRequest 的 Auth Provider 可以即时验证并访问受保护的服务,而无需事先验证,即:

  • 基本授权提供者
  • DigestAuthProvider
  • AspNetWindowsAuthProvider

但总的来说,这会降低性能,因为它必须对每个请求进行身份验证,而不是对单个缓存命中访问用户会话。