Session web场上的DotNetOpenAuth

Session web场上的DotNetOpenAuth,session,dotnetopenauth,Session,Dotnetopenauth,我正在为OpenId提供者和依赖方实现DotNetOpenAuth。在这两种情况下,服务器都位于负载平衡器的后面,因此对于任何HTTP请求,我们都不能假设我们将访问同一个服务器 DotNetOpenAuth似乎无法存储挂起的请求密钥。因为服务器可能在请求之间发生变化,所以我们不能依赖标准的InProc会话。不幸的是,我们无法成功实现SQL作为会话的存储 我的问题是:将PendingAuthenticationRequest存储为客户端cookie安全吗?比使用会话更糟糕吗?ProviderEnd

我正在为OpenId提供者和依赖方实现DotNetOpenAuth。在这两种情况下,服务器都位于负载平衡器的后面,因此对于任何HTTP请求,我们都不能假设我们将访问同一个服务器

DotNetOpenAuth似乎无法存储挂起的请求密钥。因为服务器可能在请求之间发生变化,所以我们不能依赖标准的InProc会话。不幸的是,我们无法成功实现SQL作为会话的存储


我的问题是:将PendingAuthenticationRequest存储为客户端cookie安全吗?比使用会话更糟糕吗?

ProviderEndpoint.PendingAuthenticationRequest属性仅为方便起见,主要用于更简单的场景。如果它对你不起作用,无论如何用另一种方式存储它,完全忽略这个属性。没有造成伤害

最终,会话由HTTP cookie跟踪,因此如果愿意,您当然可以将身份验证请求状态完全存储在cookie中,以便它在web场环境中工作。另一种方法是不要求客户端(或服务器)通过直接在OP端点URL处处理所有内容(包括身份验证)或使用包含需要跟踪的所有状态信息的查询字符串从OP端点URL重定向用户来跟踪状态。不过,要小心后一种方法,因为您将向用户公开您的状态数据以供查看,并可能对其进行篡改

简而言之,您可以选择也可以不选择在SQL存储中存储用户会话。那应该很好。我认为您遇到的问题(我们通过电子邮件讨论过)是您需要实现自己的
IProviderApplicationStore
,它将在数据库中存储nonce和关联,并在所有web服务器上共享。这是必需的,并且与用户会话状态正交,因为它存储在应用程序级别