我正在为OpenId提供商和依赖方实施DotNetOpenAuth.在这两种情况下,服务器都位于负载均衡器之后,因此对于任何HTTP请求,我们都不能假设我们将访问同一台服务器.
似乎DotNetOpenAuth 依赖于Session来存储待处理的请求密钥.由于服务器可能在请求之间发生变化,因此我们无法依赖标准的InProc会话.不幸的是,我们无法成功实现SQL作为Session的存储.
我的问题是:将PendingAuthenticationRequest存储为客户端cookie是否安全?还是比使用Session差吗?
该ProviderEndpoint.PendingAuthenticationRequest
物业仅供您方便,主要用于简单的场景.如果它不适合你,请务必以另一种方式存储并完全忽略此属性.那里没有伤害.
最终,会话由HTTP cookie跟踪,因此如果您愿意,可以将auth请求状态完全存储在cookie中,以便它可以在Web场环境中运行.另一种方法是不要求客户端(或服务器)通过直接在OP端点URL处理所有内容(包括身份验证),或者使用包含所有内容的查询字符串从OP端点URL重定向用户来跟踪状态您需要跟踪的州信息.请注意后一种方法,因为您将向用户公开您的状态数据以查看并可能篡改.
简而言之,您可能会也可能不会选择在SQL存储中存储用户会话.那应该没问题.我认为你遇到的问题(我们通过电子邮件讨论过)是你需要实现自己的问题IProviderApplicationStore
,它会将nonce和association存储在所有web服务器共享的数据库中.这是必要的,并且与用户会话状态正交,因为它存储在应用程序级别.