代码之家  ›  专栏  ›  技术社区  ›  Matt Sherman

Web场上的DotNetOpenAuth

  •  5
  • Matt Sherman  · 技术社区  · 14 年前

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

    看来dotneptopenauth depends on the Session 存储挂起的请求密钥。由于服务器可能在请求之间发生更改,因此我们不能依赖标准的InProc会话。不幸的是,我们无法成功地将SQL作为会话存储实现。

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

    1 回复  |  直到 14 年前
        1
  •  5
  •   Andrew Arnott Rick Strahl    14 年前

    这个 ProviderEndpoint.PendingAuthenticationRequest 属性的存在只是为了您的方便,主要是为了更简单的场景。如果它对你不起作用,那就另当别论,完全忽略这个属性。那里没有伤害。

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

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

    推荐文章