session - 网络场上的 DotNetOpenAuth

标签 session dotnetopenauth

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

看来 DotNetOpenAuth depends on the Session存储待处理的请求 key 。由于服务器可能会在请求之间发生变化,因此我们不能依赖标准的 InProc Session。不幸的是,我们无法成功实现 SQL 作为 Session 的存储。

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

最佳答案

ProviderEndpoint.PendingAuthenticationRequest 属性只是为了您的方便而存在,主要用于更简单的场景。如果它对您不起作用,请务必以其他方式存储它并完全忽略此属性。那里没有造成任何伤害。

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

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

关于session - 网络场上的 DotNetOpenAuth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3557514/

相关文章:

asp.net-mvc - 基于 MVC 的 API - 如何实现 OAuth?

.net - 如何在不询问用户 OpenID URL 的情况下使用 OpenID?

c# - 如何在客户端获取 DotNetOpenAuth.OAuth2 返回的错误消息?

php - 仅在 session 已设置且变量 == 时显示页面

php - 尽管经过多次尝试和在线搜索,$SESSION 仍无法正常工作

Python:如何在 Django 中将 session 设置为 "fork"

c# - 使用 Windows 身份验证时 MVC5 重定向到 Login.aspx

session - Vaadin Framework 7 中 session 超时的不规则性

java - HttpSession 中的同步是否可行?

oauth - 使用 OAuth 保护我的 REST API,同时仍然允许通过第三方 OAuth 提供商进行身份验证(使用 DotNetOpenAuth)